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 - 运行时区域的主要内容,如果未能解决你的问题,请参考以下文章