运行时数据区域

你。 提交于 2020-03-05 08:19:37

1、方法区,堆

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

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

 

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

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

 

运行时常量池

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

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

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

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

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

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

3直接内存

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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!