JAVA - JVM - 运行时区域

Posted hpzhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA - JVM - 运行时区域相关的知识,希望对你有一定的参考价值。

本章内容

  本章介绍,JVM运行过程中是怎样划分区域的,堆,栈,方法区,这些是什么鬼?每个区域存储哪些内容?

 

区域介绍

  程序计数器

  虚拟机栈

  本地方法栈

  堆

  方法区

 

本章已Hotspot为例,虚拟机栈和本地方法栈,是合并的

 

程序计数器(线程私有)

  1 作用 存储程序当前执行指令的地址

  2 注意 JVM规定当调用native方法时,程序计数器的值是空,非native方法时,保存的是当前需要执行的指令地址

 

虚拟机栈(线程私有)

  1 作用 每个方法执行时,都会创建一个栈帧来存储当前运行时的数据

  2 存储内容

    2.1 局部变量表 方法中的局部变量(方法中声明的非静态变量以及函数形参) 基本数据变量(存储值) 引用数据变量(引用-一般指向堆)

    2.2 操作数栈

    2.3 执行运行时常量池的引用

    2.4 方法返回地址

    2.5 附加信息

 

堆(线程共享)

  1 作用 对象实例数据的存储(主要是对象)

 

方法区(线程共享)

  1 作用 存储类加载后的相关信息

  2 存储内容

    2.1 类的信息(类的名称,方法信息,字段信息)

    2.2 静态变量

    2.3 常量以及编译器编译后的代码 

 

思考

  1 Class对象的使用场景?为什么类加载完成后要在堆中生成一个Class对象?

以上是关于JAVA - JVM - 运行时区域的主要内容,如果未能解决你的问题,请参考以下文章

JVM 运行时数据区

JVM运行时数据区域

JVM笔记-运行时内存区域划分

深入理解java:1.3.1 JVM内存区域的划分(运行时数据区)

JVM运行时数据区域

jvm,深入理解java虚拟机,运行时数据区域