首页 > 其他 > 详细

运行时数据区域

时间:2020-03-05 09:51:36      阅读:53      评论:0      收藏:0      [点我收藏+]

1、方法区,堆

堆所有线程共享的内存,虚拟机启动时分配,存放对象实例和数组。逃逸分析、栈上分配、标量替换等技术导致所有对象不一定都在堆中分配。

分为新生代和老年代。主要有Eden空间,From Survivor空间和To Survivor空间。

 

方法区,各个线程共享的内存区。用于存储已经被加载的类信息和常量和静态变量、即时编译器编译后的代码数据,被称为永久代,Permanent Generation。这块垃圾回收主要是类卸载和常量池的回收,

一般来说回收结果比较难让人满意。

 

运行时常量池

方法区的一部分,class文件类、接口、字段、方法、版本等信息,还有一项信息就是常量池。常量池,用于存放编译期间生成的各种字面量和符号引用。这部分内容类加载后进入方法区的运行时常量池中

存放。并不一定编译才会产生常量,运行期间也可能将新的常量放入池中,如String.intern().

2、虚拟机栈、本地方法栈、程序计数器

程序计数器,记录每个线程要执行的下一条指令的地址,执行本地方法为空,执行java方法记录下一条指令的地址,没有规定内存溢出。

虚拟机栈包括栈帧,每个方法都包含一个栈帧,局部变量表,操作数栈,动态链接,方法出口等信息。方法从调用到执行完成,对应着一个栈帧的出栈入栈。

局部变量表内存空间分配在编译期间就完成了。

3直接内存

java nio通过native函数库直接分配堆外内存,通过DirectByteBuffer对象作为内存的引用操作,

 

运行时数据区域

原文:https://www.cnblogs.com/xiaofeiyang/p/12418209.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!