issues
search
xzhuz
/
blog-gitment
博客备份和comment记录
https://meisen.pro
0
stars
0
forks
source link
JVM内存
#20
Open
xzhuz
opened
6 years ago
xzhuz
commented
6 years ago
JVM内存
运行时数据区每个独立线程都包含PC计数器(Program counter register)、虚拟机栈(JVM Stack)、本地方法栈(Native Method Stack)
程序计数器: 是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。随着线程的启动而创建。
JVM Stack: 是JVM的内存指令区。每个方法在执行的时候,都会创建一个栈帧(Stack Frame), 每个栈帧包含了局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用到执行完成这个过程,就对应这一个栈帧在虚拟机栈中的入栈到出栈的过程。
本地方法栈:支持执行非Java方法。
堆( Heap )和方法区(Method Area)
堆:包含了数组和对象, 所有对象实例以及数组都要在堆上分配。当JVM启动的时候创建,GC在这个区域工作。所有线程共享。唯一目的就是存放对象实例
方法区:存储已被虚拟机加载的类信息、常量、静态变量、JIT(即时编译器)处理后的数据。类的信息包含类的版本、字段、方法、接口等信息。需要注意是常量池就在方法区中。
常量池(Constant Pool)和字符串池/字符串常量池(String Pool/ String Constant Pool)和运行时常量池(Runtime Constant Pool)
常量池: 数据编译期被确定,是class文件中的一部分,存储了类、方法、接口等中的常量,也包含字符串常量。可以理解为Class文件中的资源仓库,它是Class文件结构中与其他项目资源关联最多的数据类型。常量池中主要存放两大常量:字面量(Literal)和符号引用(Symbolic Reference)
字面量: 文本字符串、声明为final的常量值等
符号引用: 类和接口的完全限定名(Fully Qualified Name)、字段的名称和描述符(Descriptor)、方法的名称和描述符
字符串常量池:常量池中的一部分,存储了编译器产生的字符串类型数据
运行时常量池:方法区的一部分,所有线程共享。虚拟机加载Class文件之后把常量池中的数据存放到运行时常量池中。
https://www.programcreek.com/2013/04/jvm-run-time-data-areas/
JVM内存
https://www.programcreek.com/2013/04/jvm-run-time-data-areas/