关于学习jvm的一些笔记

JVM学习笔记一

jvm作为Java的虚拟机,存于jre之下。是java能够实现跨平台的重要原因。JVM从软件层面屏蔽了底层硬件,指令层面的一些细节。

  • JVM的运行时数据区

将其分为数据和指令两个部分。
数据:方法区和heap;
指令:程序计数器,虚拟机栈,本地方法栈。

**程序计数器:**指向当前线程正在执行的字节码指令的地址(行号)
思考:为何指令已经执行,系统还需要记住当前指令。
个人理解:CPU在运行线程的时候,作业调度过程中可能产生中断操作,被抢占。之后需要恢复,就需要用到地址。
**虚拟机栈:**存储当前线程正在执行的方法时所需要的数据,指令,返回地址。(线程私有的,生命周期和线程一样)
采用FILO方式将方法压入栈帧,一个方法一个栈帧。栈帧中保存方法,包含局部变量表(用于保存方法的局部变量),操作数栈(存指令),出口(返回地址)等等。当递归调用方法的时候,会产生N个栈帧,导致栈溢出的问题。在一个方法中调用另一个方法时,被调用的方法在方法的下面。
**本地方法栈:**运行本地方法,应该是native方法。
**方法区:**类信息,也就是我们的.class文件,还有常量,静态变量,JIT(1.7之前)
**堆:**存储的都是对象和数组,所有new出来的对象都在堆中存放。
在此引用一下其他的一些常见的对象在内存存储的解释,超详细

猜你喜欢

转载自blog.csdn.net/Vi_sener/article/details/82698309