JVM 学习笔记
文章平均质量分 92
求和的小熊猫
博客复读机
展开
-
JVM 系列(6) —— JVM 类加载机制
Java 虚拟机把描述类的数据从 class 文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用。原创 2022-08-25 10:21:31 · 341 阅读 · 0 评论 -
JVM 系列(5) —— 垃圾收集器
经典垃圾收集器目前衡量垃圾收集器的三个最重要指标分别为:内存占用 (Footprint)吞吐量 (Throughtput)延迟 (Latency)这三个指标也被称为不可能的三角,即无法做到三者间的,随着硬件性能的提升,人们反而可以容忍内存占用的扩大,对延迟的容忍度反而降低。该图展示了七种用于不同分代的分代收集器Serial/Serial Old 收集器Serial 收集器是一个新生代收集器,采用复制算法。Serial Old 收集器是 Serial 收集器的老年代版本,采用标记整理算法原创 2020-12-27 23:23:39 · 133 阅读 · 0 评论 -
JVM 系列(4) —— HotPots 的内部细节
根节点枚举在枚举根节点时,所有的用户线程都会被被暂停,因为在根节点枚举过程中,为了保证分析结果的准确性,需要保证根节点的引用关系不会发生变化。即根节点的枚举必须在一个能保障内存一致性的快照中。为了避免在查找引用链的过程中从上到下一个不漏的检查所有执行完的上下文和全局引用的位置这一耗时耗力的情况出现,在类加载完成后, HotSpot 会把对象内什么偏移量上是什么数据类型全部计算出来,并将引用在栈里和寄存器里的位置记录在 OopMap 中。安全点OopMap 虽然会帮助 HotSpot 迅速完成根节点枚原创 2020-12-19 15:24:44 · 277 阅读 · 3 评论 -
JVM 系列(3) —— 垃圾回收算法
垃圾回收如何判断对象已死在 Java 对对象进行回收之前,需要判断哪些对象已死,哪些对象存活,常用的判断方法有两种: 引用计数法和可达性分析法引用计数法引用计数法就是在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一,当引用失效时就减一。当计数器为 0 时,对象便不再被引用。引用计数法虽然消耗了一些空间,但是原理简单,判定高效,在绝大多数情况下是一个不错的算法。但是引用计数法需要考虑到很多例外的情况,必须要配合大量的额外工作才能正确的工作,比如单纯引用计数法就很难解决对象之间相互循原创 2020-12-19 15:03:26 · 96 阅读 · 1 评论 -
JVM 系列(2) —— Java 的对象
对象创建Java 通过 new 创建对象的过程当 Java 虚拟机遇到一条字节码指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号的引用,并检查这个符号引用代表的类是否被加载解析和初始化过。如果没有则先执行相应的类加载过程。在类加载检查通过后,虚拟机便会为新生的对象分配内存。在 Java 堆中,如果内存是规整的,即所有使用过的内存放在一边,未被使用的内存放在另一边,使用指针作为这两个区域的分界点,这时分配内存只需要将指针移动所分配内存大小的距离即可,这种内存分配方式称为“指针碰撞(B原创 2020-12-15 22:36:00 · 132 阅读 · 0 评论 -
JVM 系列(1) —— 运行时数据区域
Java 运行时数据区Java 虚拟机会在 Java 运行程序的过程中把它所管理的内存分为若干个不同的数据区域程序计数器程序计数器,可以看做是当前线程所执行字节码的行号指示器。其中,每个线程都有一个独立的程序计数器,这样线程切换后都能恢复到正确的执行位置。如果一个线程正在执行是一个 Java 方法,这个计数器是记录的是正在执行的是虚拟机字节码指令地址,如果执行的是本地方法,这个计数器值则应为空。Java 虚拟机栈Java 虚拟机栈是线程私有的,他的生命周期与线程相同。虚拟机栈描述的是 Java原创 2020-12-14 22:29:04 · 93 阅读 · 0 评论