当前位置:首页 > 虚拟机 > 正文

深入理解jvm虚拟机第三版pdf


一、说说JVM常用垃圾回收器的特点、优劣势、使用场景和参数设置

Java中的垃圾回收器几乎是面试的必考点。无论你面试的是初级、中级还是高级,都免不了要问一些关于垃圾收集器的知识点。不管你在实际开发中使用了多少,还是需要对它有更深入的了解,才能在面试时不被打折扣。

本文简要介绍了JVM中常用的几种垃圾收集器的主要特性、使用场景以及优化建议。我希望它能作为一个起点并帮助您开始。

新生代收集器

老年代收集器

新生代和老年代收集器

串行收集器是最基本的,也是最古老的收集器开发中。在JDK1.3.1之前,它是HotSpot新一代集合的唯一选择。

操作图

具有以下特点:

简单、高效。由于它采用单线程的方式,与其他类型的收集器相比,它是针对单CPU的,没有上下文之间的切换,所以效率比较高。

将在用户不知情的情况下停止所有工作线程。

在用户的桌面应用场景中,可用内存一般不大,可以在短时间内完成垃圾回收。只要不频繁发生,这是可以接受的

对于单CPU环境的限制,Serial收集器有线程切换开销,可以获得最高的单线程收集效率

ParNew收集器实际上是Serial收集器的多线程版本。除了使用多线程进行垃圾收集之外,其余与Serial收集器一致。

操作图

多线程版本的Serial可以更有效地利用系统资源

与Serial相同,所有工作都会在没有用户的情况下停止了解Threads

用于Server模式,亮点是除了Serial之外,它是目前唯一可以与CMS收集器配合使用的,是一个非常重要的垃圾收集器。

运行图

具有以下特点:

追求高吞吐量,高效利用CPU,优先吞吐量,实现精确控制。

根据相关特性,我们很容易想到它的使用场景,即:当应用程序运行在多个CPU上且对暂停时间没有特别高的要求时,程序主要在以下位置进行计算:的背景。它特别适合ParNew收集器,不需要与用户进行太多交互。

SerialOld是Serial收集器的老一代版本。它也是一个单线程收集器并使用标记排序算法。

它具有以下特点:

优点和缺点与Serial基本相同。它是与串行收集器结合使用的老一代收集器。

CMS(ConcurrentMarkSweep)收集器是一种旨在获得最短回收停顿时间的收集器。采用的算法是“标记-清除”,操作过程分为四步:

操作图

它有以下特点:

对于例如,服务器上常见的WEB、B/S系统应用。

ParallelOld是旧版本的ParallelScavenge收集器。它采用多线程和“标记排序”算法,充分利用多核CPU的计算能力。

它具有以下特点:

优缺点请参考ParallelScavenge收集器。

这样,在注重吞吐量、对CPU资源敏感的场景中,就有了ParallelScavenge(新生代)和ParallelOld(老年代)收集器的“牛逼”应用组合;

G1(Garbage-First)是JDK7-u4推出的一款商业收集器

它有以下特点:

G1收集器是最前沿的成果当今收集器技术的发展。

G1需要一个内存集(具体来说是卡表)来记录新生代和老年代的引用关系。这种数据结构在G1中需要大量的内存,可能会达到整个堆内存。容量的20%或更多。而且,维护G1中的内存集的成本较高,带来较高的执行负载,影响效率。

据《深入理解Java虚拟机》作者介绍,CMS在小内存应用中表现优于G1,而G1在大内存应用中更有优势。大小内存限制为6GB至8GB。

我个人认为G1已经基本完全压制了cms、并行等回收商。上面列出了缺点。但如果你不是追求极致的性能,基本可以引入无脑G1。关于垃圾收集器有很多基础知识点保持不变。如果你学了(懂了),N年的相关知识就可以应对面试了。,是另一个高频面试测试网站,在这方面还是值得花点功夫的。文章如有不足或错误,欢迎指出,共同进步!