学习总结Java虚拟机(JVM)

前言

jvm想必大家都不陌生,本文是学习了《深入理解Java虚拟机》第三版之后的总结,在此作为个人总结,也相当于回顾梳理,分享给大家~ 如果哪里有问题,还望指正!最后会提供一些优秀的参考链接。

1.jvm概述

1.1 jvm简介
  1. java虚拟机(Java Virtual Machine)
1.2 jvm结构图

学习总结Java虚拟机(JVM)

1.2.1. 程序计数器

定义:较小的、具有记录性的、线程私有的、内存空间。
工作原理:通过改变计数器的值,选取下一条需要执行(分支、循环、跳转、异常处理等)的字节码指令。
线程私有:java多线程是轮流切换执行的,为了下一次切换,准确定位到正确的位置,每个线程都要有独立的程序计数器。
:执行为Native方法时,计数器值为Undefind;正在执行为java方法时,值为正在执行的字节码指令的地址
特点:内存区域中,唯一一个没有规定任何OutOfMemoryError(内存溢出)情况的区域

1.2.2. java栈

学习总结Java虚拟机(JVM)
定义:表示java方法运行的内存模型。
工作原理:当每一个方法入栈时,同步创建一个栈帧(Stack Frame),栈帧用于存储局部变量表、动态链接、操作数帧、方法出口等信息。局部变量表中,存储着基本数据类型、对象引用(referece类型)、以及返回指向另一个字节码指令的地址。这些类型的存储空间用变量槽(Slot)来表示,基本数据类型中的doubel、long类型的数据占用2个变量槽。其他类型的数据只占用1个变量槽。并且,栈帧中分配的局部变量空间是完全固定的。分配的是变量槽的数量。内存的大小完全是由jvm自行决定。
线程私有:栈的生命周期和线程一样。
特点 :HotSpot虚拟机栈容量是不可以扩展的,所以线程一但申请栈空间成功,就不会出现OutOfMesoryError,不成功自然会OOM。

1.2.3. 本地方法栈

定义:执行本地的(Native)方法。

1.2.4. 堆

定义 : 存放“几乎”所有的java对象实例的、线程共享的内存空间,主要进行垃圾回收,又称GC(Garbage Collected Heap)堆
GC工作原理:对象创建分配内存空间,并进行内存自动化管理,进行对象选择回收。注:学习GC,1.先要了解垃圾收集算法,在了解常见的垃圾收集器。最后分析垃圾回收的流程。
特点 :没有规定内存空间是否连续,理论上是需要的。并且也是作为java开发的最重要学习的一部分。

1.2.5. 方法区

定义 :存放已被加载的常量、静态变量、代码缓存等数据的、线程共享的、内存区域。
特点 :基于jdk8,方法区并不是所谓的“永久代”,并且在jdk8中完全废弃此概念。此区域并没有强制规定需要实现垃圾回收。

1.2.6. 运行时常量池

定义:方法区的一部分,用于存放类版本、字段、方法、接口等描述信息,存放常量池表:用与存放编译期生成的各种字面量与符号的引用。类加载后,这部分信息,将会存放到方法区运行时常量池中。

2.垃圾回收算法

后续更新

3. 垃圾回收器

后续更新

4.参考

参考书籍:《深入理解java虚拟机》第三版
参考链接: https://www.cnblogs.com/zuoxiaolong/category/508918.html
参考链接: https://blog.csdn.net/qq_41701956/article/details/81664921
感谢浏览!