JVM
文章平均质量分 97
了解JVM底层原理
搬砖界的小白
凡所迹遇,绝非偶然
展开
-
【JVM】第五篇 垃圾收集器G1和ZGC详解
ZGC收集器能仅从引用上就明确得知一个对象是否处于重分配集之中,如果用户线程此时并发访问了位于重分配集中的对象,这次访问将会被预置的内存屏障(读屏障)所截获,然后立即根据Region上的转发表记录将访问转发到新复制的对象上,并同时修正更新该引用的值,使其直接指向新对象,ZGC将这种行为称为指针的“自愈”Self-Healing)能力。统一存储器存储结构,表示内存只有一块,所有的CPU都去访问这一块内存,会存在内存竞争,有竞争就会有锁的问题,有锁就会影响执行的效率,并且CPU核心数越多,竞争就会越激烈。原创 2023-09-27 17:19:46 · 526 阅读 · 0 评论 -
【JVM】第四篇 垃圾收集器ParNew&CMS底层三色标记算法详解
当这一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空间一次清理掉。的特点特出的一种标记算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。优缺点: 效率高,但是只能使用在年轻代,不能使用在老年代中,老年代中大多数的对象都是存活的,没有多余的担保空间来将内存一分为二。如老年代中对象的存活几率是非常高的,而且没有额外的空间进行分配担保,所以选择“标记-清除”或“标记-整理”算法进行垃圾收集。原创 2023-09-27 14:29:06 · 497 阅读 · 0 评论 -
【JVM】第三篇 JVM对象创建与内存分配机制深度剖析
大量的对象被分配在Eden区,Eden区满了后会触发Minor GC,可能会有99%以上的对象成为垃圾被回收掉,剩余存活的对象会被挪到S0区,下一次Eden区满了后又会触发Minor GC,把Eden区和survivor区垃圾对象回收,把剩余存活的对象一次性挪动到S1区,因为新生代的对象都是朝生夕死的,存活时间很短,所以JVM默认的8:1:1的比例是很合适的,让Eden区尽量的大,Survivor区够用即可。JVM内存布局规定了Java在运行过程中的内存申请、分配、管理的策略,保证了JVM高效的运行。原创 2023-09-26 01:39:03 · 596 阅读 · 0 评论 -
【JVM】第二篇 JVM内存模型深度剖析与优化
按照线程是否共享来划分TLAB线程本地分配缓存区,这是一个线程专用的内存分配区域由于对象一般会分配在堆上,而堆是全局共享的。因此在同一时间,可能会有多个线程在堆上申请空间。因此,每次对象分配都必须要进行同步,在竞争激烈的场合分配的效率又会进一步下降, JVM使用TLAB来避免多线程冲突,在给对象分配内存时,每个线程使用自己的TLAB,这样可以避免线程同步,提高了对象分配的效率JVM内存模型清晰版(结合代码分步解析)int a = 1;int b = 2;return c;原创 2023-09-24 23:03:32 · 499 阅读 · 0 评论 -
【JVM】第一篇 从JDK源码级别彻底剖析JVM类加载机制
一. Java类加载运行全过程 二. 从JDK源码级别剖析JVM核心类加载器 三. 从JDK源码级别剖析类加载双亲委派机制 四. 手写自定义类加载器打破双亲委派机制 五. Tomcat类加载机制深度剖析 六. 手写Tomcat类加载器实现多版本代码共存隔离原创 2021-11-18 09:50:59 · 551 阅读 · 0 评论