您的位置:首页 > 编程语言 > Java开发

Java内存区域分析

2016-04-02 11:13 429 查看


程序计数器

指令运行的指示器.

每一个线程都有独立的程序计数器,互无影响,我们称这类区域为线程私有的内存.

运行Java方法,计数器记录的是正在运行的虚拟机字节码指令地址;假设运行的是native方法,这个计数器为空.

此内存区域唯一一个没有规定不论什么OutOfMemoryError的区域.

虚拟机栈

Java虚拟机栈也是线程私有的,它的生命周期与线程同样.

虚拟机栈描写叙述的是Java方法运行的内存模型:每一个方法在运行的时候都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息.

假设线程请求的深度大于虚拟机深度,将抛出StackOverflowError异常;假设虚拟机能够动态扩展,扩展时无法申请到足够的内存,将抛出OutOfMemoryError.

本地方法栈

和虚拟机栈很类似,他们之间的差别是本地方法栈是为虚拟机使用的native方法服务的,而虚拟机栈是为虚拟机运行Java方法服务的.

Java堆

Java堆是虚拟机管理的最大的一块内存.

被全部线程共享的一块区域.

此内存唯一目的是存放对象的实例.

垃圾收集管理主要区域.

方法区

方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机载入的类信息,常量,静态变量,即时编译器编译后的代码等数据.

运行时常量池

运行是常量池是方法区的一部分.

用于存放编译期生成的各种字面量和符号引用.

运行时常量池和Class文件常量池不一样.Java语言不要求编译时产生Class文件常量才干进入运行时常量池,运行期间也可能将新的常量放入池中.这样的特性被开发者用的多便是String类的intern()方法.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: