JVM垃圾收集
文章平均质量分 94
头铁菜鸟
stay foolish stay hungry
展开
-
浅谈JVM的垃圾收集(二)——CMS垃圾收集器
背景作为浅谈JVM的垃圾收集(一)的后续文章,建议先看前文再来读这篇文章。前言上一篇文章介绍了三大垃圾收集算法,而垃圾收集器就是垃圾收集算法的具体实现。本文主要介绍垃圾收集器,重点介绍CMS、G1、ZGC和Shenandoah收集器实现的细节。年轻代收集器Serial、ParNew、Parallel Scavenge老年代收集器Serial Old、Parallel Old、CMS收集器特殊收集器G1收集器,跨代收集收集器,连线代表可结合使用CMS收集器CMS(C原创 2021-04-08 11:23:56 · 596 阅读 · 0 评论 -
浅谈JVM的垃圾收集(一)
前言本文主要介绍Java中的有关的垃圾收集算法,以及实现算法的垃圾收集器背景我们经常可以听到垃圾收集这个词,那Java中”垃圾“是指什么呢?为什么要收集“垃圾”呢?怎么知道哪些是“垃圾”呢?什么时候收集“垃圾”呢?怎么收集“垃圾”呢?带着这些问题来看这篇文章垃圾的定义百度百科的关于垃圾的定义垃圾是失去使用价值、 无法利用的废弃物品,是物质循环的重要环节。在Java中,万物皆对象。类似的,”垃圾“在Java中的定义即是失去使用价值、无法利用的对象,是垃圾收集的重要环节。为什原创 2021-04-08 11:20:23 · 313 阅读 · 0 评论 -
浅谈JVM的垃圾收集——OopMap与安全点
背景前面的文章介绍了可作为GC ROOT的节点包括:虚拟机栈中引用的对象方法区中常量和静态熟悉引用的对象本地方法栈中引用的对象等等具体可看这篇文章——浅谈JVM的垃圾收集(一)OopMap(Ordinary Object Pointer,普通对象指针)迄今为止,所有收集器在根节点枚举这一步骤都是必须暂停用户线程的,然后垃圾收集线程会对栈中的内存进行查找,看哪些位置存放了引用类型。但是如果要遍历整个栈,这无疑是很费时的。能不能把栈上代表的引用的位置全部记录下来呢?这样就不用全栈扫描了Hot原创 2021-04-08 11:17:27 · 1122 阅读 · 1 评论 -
浅谈JVM垃圾收集——记忆集与卡表
背景上一篇文章提到了,当JVM进行垃圾收集时,它是怎么判断对象是否跨代引用的呢?记忆集与卡表为解决对象跨代引用所带来的问题,垃圾收集器在新生代中建 立了名为记忆集(Remembered Set)的数据结构,用以避免把整个老年代加进GC Roots扫描范围。事实上并不只是新生代、老年代之间才有跨代引用的问题,所有涉及部分区域收集(Partial GC)行为的 垃圾收集器,典型的如G1、ZGC和Shenandoah收集器,都会面临相同的问题,记忆集是一种用于记录从非收集区域指向收集区域的指针集合的原创 2021-04-08 11:16:54 · 2798 阅读 · 6 评论 -
浅谈JVM垃圾收集——并发的可达性分析
前言当前主流编程语言的垃圾收集器基本上都是依靠可达性分析算法来判定对象 是否存活的,可达性分析算法理论上要求全过程都基于一个能保障一致性的快照中才能够进行分析, 这意味着必须全程冻结用户线程的运行。在前面的文章分析中,根节点枚举在OopMap的帮助下,它带来的停顿已经是非常短暂且相对固定(不随堆容量而增长)的了。详情看:OopMap和安全点可从GC Roots再继续往下遍历对象图,这一步骤的停顿时间就必定会与Java堆容量直接成正比例关系了:堆越大,存储的对象越多,对象图结构越复杂,要标记更多对原创 2021-04-08 11:14:10 · 225 阅读 · 2 评论