深入理解java虚拟机精华总结
文章平均质量分 93
以图解的方式,对《深入理解Java虚拟机》一书的精华部分做简单的总结,适合需要复习JVM相关知识的人使用。
黄俊懿
放下期待、不抱希望地努力,踏踏实实,能走多远是多远。
展开
-
【Java虚拟机】三色标记、增量更新、原始快照、记忆集与卡表
然后用户线程才把到该对象的引用链断开,此时GC垃圾收集线程是不知道的,GC垃圾收集线程对于已经遍历过的对象,是不会再遍历的,因此该对象就会被当成存活对象被保留下来。但是在JVM中存在跨代引用的现象,也就是老年代的对象引用了年轻代的对象,或者是年轻代的对象引用了老年代的对象。但是JVM在进行年轻代的垃圾收集时,只会对年轻代进行扫描,不会扫描老年代,那么如果一个年轻代对象仅存在老年代对象对它的引用时,GC是扫描不到它的,自然就不会被标记为存活对象。如果是白色的对象,表示无法通过GC Roots的引用链访问到。原创 2024-04-14 10:41:35 · 1449 阅读 · 1 评论 -
【Java虚拟机】简单易懂的ZGC原理分析
然后进入到下一轮垃圾收集时,就会使用M1标志位去标记存活的对象,那么在本轮垃圾收集中存活的对象的M1标志位就会被置为1,那么M1标志位没有被置为1的,就可以认为是垃圾对象,可以被清理,这里就包括了上一轮中存活的M0标志位被置为1的对象。有好处,自然也是有代价的。可以看到,有了染色指针和转发表,ZGC就可以在标记结束之后,就马上进行存活对象的转移了,并且用户线程是不需要停顿的,不需要停止用户线程等待存活对象转移完毕并且修正指针指向的值,也就没有了这部分STW的时间消耗,性能就大大提升了。原创 2024-04-14 10:32:54 · 1339 阅读 · 0 评论 -
深入理解java虚拟机精华总结:线程安全与锁优化
如果出现两条以上的线程争用同一个锁的情况,那轻量级锁就不再有效,必须要膨胀为重量级锁,锁标志的状态值变为“10”,此时Mark Word中存储的就是指向重量级锁(互斥量)的指针,后面等待锁的线程也必须进入阻塞状态。如果获取对象锁失败,那当前线程就应当被阻塞等待,直到请求锁定的对象被持有它的线程释放为止。通常意义上所讲的线程安全,它需要保证对这个对象单次的操作是线程安全的,我们在调用的时候不需要进行额外的保障措施,但是对于一些特定顺序的连续调用,就可能需要在调用端使用额外的同步手段来保证调用的正确性。原创 2023-07-09 22:52:19 · 189 阅读 · 0 评论 -
深入理解java虚拟机精华总结:硬件的效率与一致性、Java内存模型、Java与线程、Java与协程
每条线程还有自己的工作内存(Working Memory,可与前面讲的处理器高速缓存类比),线程的工作内存中保存了被该线程使用的变量的主内存副本,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的数据[3]。内核线程(Kernel-Level Thread,KLT)就是直接由操作系统内核(Kernel,下称内核)支持的线程,这种线程由内核来完成线程切换,内核通过操纵调度器(Scheduler)对线程进行调度,并负责将线程的任务映射到各个处理器上。原创 2023-07-08 08:20:59 · 189 阅读 · 0 评论 -
深入理解java虚拟机精华总结:运行时栈帧结构、方法调用、字节码解释执行引擎
Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame) 则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素,栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。原创 2023-05-08 21:54:10 · 1298 阅读 · 0 评论 -
深入理解java虚拟机精华总结:性能监控和故障处理工具、类加载机制
双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序决定的。原创 2023-03-06 22:31:49 · 388 阅读 · 0 评论 -
深入理解java虚拟机精华总结:如何判断对象是否可回收、引用、finalize、方法区回收、垃圾收集算法、垃圾收集器、内存分配与回收策略
G1收集器跟踪各个Region里面的垃圾堆积的“价值”大小,价值即回收所获得的空间大小以及回收所需时间的经验值,然后在后台维护一个优先级列表,每次根据用户设定允许的收集停顿时间(使用参数-XX:MaxGCPauseMillis指定,默认值是200毫秒),优先处理回收价值收益最大的那些Region。”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。Serial收集器的老年代版本,单线程,使用标记-整理算法。原创 2023-02-26 19:43:05 · 525 阅读 · 0 评论 -
深入理解java虚拟机精华总结:jvm内存模型(运行时数据区域)、对象、OOM异常
以前读过好几遍《深入理解java虚拟机》这本书,最近又打算重读一遍,并且做一些笔记,把重点内容记录下来,所以想开一个精华总结的系列,记录里面书中的重点内容。原创 2023-02-26 09:33:25 · 674 阅读 · 0 评论