深入理解Java虚拟机
文章平均质量分 95
Java虚拟机JVM
参考数据:《深入理解Java虚拟机》
小游子YKY
宽和慈善,不忤于物,进退沉浮,自得而已。
展开
-
Java虚拟机:Java模块化系统
Java模块化系统目录1、Java模块化系统2、模块化的兼容性1)模块路径2)模块化系统访问路径规则3)它本身面临的模块间的管理和兼容性问题3、模块化的类加载器1)模块化下的类加载器变动2)类加载的委派关系变动1、Java模块化系统JDK9开始引入,目的:为了能够实现模块化的关键目标:可配置的封装隔离机制。可配置的封装隔离机制主要解决:首先要解决JDK9之前基于类路径(ClassPath)来查找依赖的可靠性问题;还解决了原来类路径上跨JAR文件的public类型的可访问性问题。JDK 9的.原创 2022-09-04 15:54:55 · 626 阅读 · 0 评论 -
Java虚拟机:低延迟垃圾收集器
低延迟垃圾收集器衡量垃圾收集器的三项最重要的指标是:内存占用、吞吐量和延迟Shenandoah和ZGC,几乎整个工作过程全部都是并发的,只有初始标记、最终标记这些阶段有短暂的停顿,这部分停顿的时间基本上是固定 的,与堆的容量、堆中对象的数量没有正比例关系。这两款目前仍处于实验状态的收集器,被官方命名为“低延迟垃圾收集器”1、Shenandoah收集器Shenandoah(目前)是默认不使用分代收集的Shenandoah使用连接矩阵的全局数据结构来记录跨Region的引用关系,降低了处理跨.原创 2021-09-19 15:34:43 · 350 阅读 · 0 评论 -
Java虚拟机:垃圾收集算法
Java与C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。垃圾收集算法1、分代收集理论分代收集名为理论,实质是一套符合大多数程序运行实际情况的经验法则,它建立在两个分 代假说之上:1)弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的。2)强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象就越难以消亡。3)跨代引用假说(Intergener.原创 2021-05-15 22:24:37 · 991 阅读 · 0 评论 -
Java虚拟机:HotSpot的算法细节实现
HotSpot的算法细节实现1、根节点枚举所有收集器在根节点枚举这一步骤时都是必须暂停用户线程的即使是号称停顿时间可控,或者(几乎)不会发生停顿的CMS、G1、 ZGC等收集器,枚举根节点时也是必须要停顿的。根节点枚举始终还 是必须在一个能保障一致性的快照中才得以进行“一致性”的意思是整个枚举期间执行子系统 看起来就像被冻结在某个时间点上,不会出现分析过程中,根节点集合的对象引用关系还在不断变化的情况目前主流Java虚拟机使用的都是准确式垃圾收集,所以当用户线程停顿下来之后,其.原创 2021-04-13 23:02:54 · 415 阅读 · 20 评论 -
Java虚拟机:概述、对象生存法则
Java与C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。一、概述Java堆和方法区这两个区域有着很显著的不确定性:1、一个接口的多个实现类需要的内存可能会不一样,一个方法所执行的不同条件分支所需要的内存也可能不一样2、只有处于运行期间,我们才能知道程序究竟会创建哪些对象,创建多少个对象,这部分内存的分配和回收是动态的垃圾收集器所关注的正是这部分的内存该如何管理二、对象已死?1、引用计数法在对象中添加一个引用计数器,每当有一个地方引用.原创 2021-03-31 12:26:59 · 1555 阅读 · 5 评论 -
Java虚拟机:概述、对象生存法则
Java与C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。一、概述Java堆和方法区这两个区域有着很显著的不确定性:1、一个接口的多个实现类需要的内存可能会不一样,一个方法所执行的不同条件分支所需要的内存也可能不一样2、只有处于运行期间,我们才能知道程序究竟会创建哪些对象,创建多少个对象,这部分内存的分配和回收是动态的垃圾收集器所关注的正是这部分的内存该如何管理二、对象已死?1、引用计数法在对象中添加一个引用计数器,每当有一个地方引用.原创 2021-03-24 13:21:41 · 106 阅读 · 0 评论 -
虚拟机执行子程序-虚拟机字节码执行引擎
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一 大步。虚拟机执行子程序-虚拟机字节码执行引擎一、概述二、运行时栈帧结构1、局部变量表2、操作数栈3、动态连接4、方法返回地址5、附加信息三、方法调用1、解析2、分派1)静态分派2)动态分派1、方法动态分派演示2、字段没有多态性3)单分派与多分派4)虚拟机动态分派的实现四、动态类型语言支持1、动态类型语言1)什么是动态语言2)什么叫“在编译期还是在运行期进行”?3)什么是“类型检查”?2、Java与动态类型1)jav.原创 2021-03-14 23:26:28 · 3109 阅读 · 13 评论 -
JVM:虚拟机执行子程序-虚拟机类加载机制
虚拟机类加载机制目录一、类加载的时机1、被动引用例子一2、被动引用例子二3、被动引用的例子之三4、接口的加载二、类加载的过程1、加载1、在加载阶段,Java虚拟机需要完成以下三件事情:2、获取定义类的二进制字节流方式:3、数组类的加载4、加载阶段结束后2、验证1.文件格式验证2.元数据验证3.字节码验证4.符号引用验证3、准备4、解析1、符号引用与直接引用1、符号引用:2、直接引用.原创 2021-01-26 09:43:18 · 3088 阅读 · 9 评论 -
JVM:自动内存管理-垃圾收集器与内存分配策略
JVM:自动内存管理-垃圾收集器与内存分配策略Java与C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。一、概述:Java堆和方法区这两个区域有着很显著的不确定性二、对象已死?1、引用计数法、引用计数器的缺陷2、可达性分析算法3、再谈引用 三、垃圾收集算法分代收集理论、标记-清除算法、标记-复制算法、Appel式回收、标记-整理算法四、HotSpot的算法细节实现五、经典垃圾收集器六、低延迟垃圾收集器七、选择合适的垃圾收集器原创 2021-01-12 12:27:38 · 6122 阅读 · 15 评论 -
JVM:自动内存管理之Java内存区域与内存溢出
本博客主要参考周志明老师的《深入理解Java虚拟机》第三版一、Java内存区域与内存溢出异常1、运行时数据区域运行时数据分为七大块先来看看JVM内存分布图1、程序计数器程序计数器是一个记录着当前线程所执行的字节码的行号指示器。Java虚拟机中每条线程都有独立的程序计数器程序计数器线程私有1)什么是程序计数器?程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器,在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下.原创 2021-01-07 12:03:22 · 4266 阅读 · 8 评论 -
《深入理解Java虚拟机》阅读笔记二:Java内存区域与内存溢出异常
一、运行时数据区域1、程序计数器1)什么是程序计数器?2)程序计数器为什么是线程私有的?3)程序计数器特点2、Java虚拟机栈:1)Java虚拟机栈特点 、2)局部变量表、3)栈帧、4)动态连接3、本地方法栈4、Java堆5、方法区6、运行时常量池7、直接内存 二、HotSpot虚拟机对象探秘 1、对象的创建1)当Java虚拟机遇到一条字节码new指令时2)Java对象空间内存分配方法:指针碰撞、空闲列表2、对象的内存布局句柄访问直接访问原创 2020-12-11 12:16:15 · 2391 阅读 · 6 评论