自学内容网 自学内容网

JVM堆(1.6、1.7、1.8)

一、jdk1.6

在jdk1.6里,堆的具体划分如下:

栈:包含本地方法栈、虚拟机栈、程序计数器

方法区(永久代):包含运行时常量池、字符串池

二、jdk1.7

栈:包含本地方法栈、虚拟机栈、程序计数器

堆:字符串池

方法区(永久代):包含运行时常量池

和1.6相比字符串常量池从方法区挪到了堆上

三、jdk1.8

栈:包含本地方法栈、虚拟机栈、程序计数器

堆:字符串池

元空间(堆外直接内存):运行时常量池

和1.7相比,直接取消了方法区(永久代),新增元空间。元空间放在直接内存里,不再占用堆内存。

四、各个区域解释

程序计数器

        一个只读的存储器,用来记录虚拟机执行的字节码指令地址,线程私有。确保时间片轮转之后程序还能继续执行。

Java虚拟机栈

      线程私有存储器,程序运行时,每个方法都会打包成一个栈帧,存储了局部变量表、操作数栈、方法出口等信息,然后放入栈,每个时刻在执行的方法就是当前栈顶的栈帧。方法的执行对应着虚拟机栈的出栈入栈过程。

本地方法栈

        调用本地native方法

        存储对象的运行时数据区。在虚拟机运行时内存总体最大的一块。几乎所有对象都要在堆上分配(JIT优化,逃逸分析,无逃逸的会进行锁消除、栈上分配内存,参数逃逸-不会被外部访问会进行锁消除),也是垃圾回收发生的主要区域

方法区(永久代)或者元空间

        存储被加载的类信息、常量、静态变量、即时编译后的代码等数据。没加载一个类,方法区就分配一定的内存空间

运行时常量池

        方法区的一部分。存储编译阶段生产的信息,包括字面量和符号引用常量两类。符号引用常量包括累的全限定名称、字段名称和描述符、方法名称和描述符。


原文地址:https://blog.csdn.net/qq_34374058/article/details/143771421

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!