JVM学习日记⭐️HotSpot垃圾收集器(上)⭐️

325 阅读3分钟

“这是我参与8月更文挑战的第20天,活动详情查看:8月更文挑战

🔉引言

前面我们垃圾回收的细节,但如何具体的回收,却没有提及,今天我们就来逐一介绍:HotSpot里面出现的垃圾回收器。

⭐️经典的垃圾收集器

如果说前面介绍的都是方法论,那本文介绍的就是将方法论的实践部分了-具体的垃圾收集器了。如下图,共展示了7钟垃圾收集器,它们可以作用于不同分代,有连线关系的还证明可以共同使用,接下来,就和我一起了解这些收集器的目标、原理、特性和使用场景吧。

需要注意的是无论我们如何进行比较,都找不到一个“万能”的垃圾收集器,只是每个垃圾收集器适用场景不同,特点不同罢了,所以我们要根据合适的场景选择最优的垃圾收集器,这才有要我们的必要呀,嘻嘻。 image.png

🌟Serial收集器

该收集器是最古老、最基础的收集器了,单看名字就知道它是个单线程的收集器,啥意思呢?就是你用它进行垃圾收集,那事先说好,就得暂停所有用户线程,直到收集结束。对于这种不可知、不可控的行为要坚决抵制,试想一下。你快乐的打着LOL,5V5团战了,虚拟机说了:你暂停一下游戏哈,我得进行垃圾回收了,那你能忍吗?就算你能忍,什么时候结束你知道吗?你不知道,所以这是不能接受的。

那你会说,哎呀这垃圾收集器好垃圾啊,但事实是它仍然是Hotspot运行在客户端模式的默认垃圾收集器,它当然有着优于其它垃圾收集器的地方,那就是简单高效,它是所有收集器里额外耗费内存最小的而且也没有线程交互的开销,专心做垃圾回收自然能获得较高的回收效率。

适用于用户桌面应用的场景,一般来说,这种应用分配给虚拟机的内存都不会特别大,回收时间最多也就100ms,所以只要回收不是特别频繁,还是可以接受的。 image.png

🌟PraNew收集器

该收集器与Serial类似,可以看作是Serial的多线程版本,实现上也共用了相当多的代码。看起来没有多大的创新,但是它却可以和CMS配合工作,CMS是啥呀,CMS也是垃圾回收器,在强交互应用中可以说具有划时代的意义,它首次实现了垃圾收集器与用户线程(基本上)同时工作。图如下:

image.png

📝题外话

人类生命的意义是什么?或者总体而言,一切生物的生命意义是什么?要回答这个问题,意味着要有宗教情怀。你可能会问:那么,提出这个问题究竟有什么意义呢?我的回答是:凡将其自身的生命及同类的生命视作无意义的人,不仅是不幸的,而且几乎不适于生存。

凡是不尊重、践踏、破坏他人或自己生命的人,也不值得别人尊重他的生命。