Java内存区域
2015-06-03 17:37
295 查看
最近在学校Java虚拟机方面的知识,借此写一点总结,这篇文章主要学习Java内存区域的知识
根据《Java虚拟机规范规定》Java虚拟机所管理的内存主要包括以下几个区域
-方法区
-堆
-虚拟机栈
-本地方法栈
-程序计数器
其中每个的主要作用如下:
程序计数器
程序计数器是一块较小的内容空间,它可以看成是当前线程所执行的字节码的行号显示器,每条线程有一个独立的计数器,此内存区域是唯一一个Java虚拟机规范没有规定任何OutOfMemoryError情况的区域。
Java虚拟机栈
与程序计数器一样,Java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述Java方法执行的内存模型,每个方法执行的同时都会创建一个栈针,用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每一个方法从调用到执行完的过程,就对应一个栈针在虚拟机栈中从入栈到除栈的过程。
在Java虚拟机规范中,对这个区域规定了两种异常规范:如果线程所请求的栈深度大于虚拟机栈中所允许的深度,将抛出StackOverflowError。如果虚拟机可以动态扩展,当扩展时无法申请到足够的内存,则会抛出OutOfMemroyError。
本地方法栈
本地方法栈所发挥的作用和虚拟机栈非常相似,只不过是虚拟栈为虚拟机执行Java方法而服务,而本地方法栈则为虚拟机用到的本地Native方法服务。本地方法栈也会抛出StackOverflowError和OutOfMemroyError异常。
JAVA堆
Java堆是虚拟机所管理内存中最大的一块,Java堆是所有线程共享的一块内存区域,此内存的唯一目的就是存放实例对象,几乎所有的对象实例都在这里分配内存,Java堆也是垃圾收集器管理的主要区域。
方法区
方法区域存放的是被虚拟机加载的类信息,常量,静态变量,即时编译后的代码等数据。Java虚拟机规范中将它描述成堆的一部分。常量池是方法区域的一部分,里面存放编译期生成的各种字面量和符号引用。
根据《Java虚拟机规范规定》Java虚拟机所管理的内存主要包括以下几个区域
-方法区
-堆
-虚拟机栈
-本地方法栈
-程序计数器
其中每个的主要作用如下:
程序计数器
程序计数器是一块较小的内容空间,它可以看成是当前线程所执行的字节码的行号显示器,每条线程有一个独立的计数器,此内存区域是唯一一个Java虚拟机规范没有规定任何OutOfMemoryError情况的区域。
Java虚拟机栈
与程序计数器一样,Java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述Java方法执行的内存模型,每个方法执行的同时都会创建一个栈针,用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每一个方法从调用到执行完的过程,就对应一个栈针在虚拟机栈中从入栈到除栈的过程。
在Java虚拟机规范中,对这个区域规定了两种异常规范:如果线程所请求的栈深度大于虚拟机栈中所允许的深度,将抛出StackOverflowError。如果虚拟机可以动态扩展,当扩展时无法申请到足够的内存,则会抛出OutOfMemroyError。
本地方法栈
本地方法栈所发挥的作用和虚拟机栈非常相似,只不过是虚拟栈为虚拟机执行Java方法而服务,而本地方法栈则为虚拟机用到的本地Native方法服务。本地方法栈也会抛出StackOverflowError和OutOfMemroyError异常。
JAVA堆
Java堆是虚拟机所管理内存中最大的一块,Java堆是所有线程共享的一块内存区域,此内存的唯一目的就是存放实例对象,几乎所有的对象实例都在这里分配内存,Java堆也是垃圾收集器管理的主要区域。
方法区
方法区域存放的是被虚拟机加载的类信息,常量,静态变量,即时编译后的代码等数据。Java虚拟机规范中将它描述成堆的一部分。常量池是方法区域的一部分,里面存放编译期生成的各种字面量和符号引用。
相关文章推荐
- 全方位的技术服务及相关技术解决方案(纯java解决方案)(转)
- 读SCJP认识一下Java(一)
- java synchronized 方法 对象 区别
- Java高级编程:深入剖析ThreadLocal
- struts2加载struts2常量顺序
- 5分钟将OSC Android源码从Eclipse项目转化为Android studio项目
- Java 实现zip格式的文件压缩与解压
- java Process的waitFor()
- Java中各种数据类型的存储-堆/栈
- Maven学习 之 使用m2eclipse创建web项目
- What to do about Eclipse's “No repository found containing: …” error messages?
- javamail发送hotmail邮件
- Java核心API -- 3(正则表达式)
- Java线程基础知识
- 13、Spring-shiro.xml
- JAVA单链表的实现-不带头结点但带有尾指针
- java中的subString详解及应用
- Iframe 子父窗体调用
- spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
- Eclipse如何快速修改工程名及包名