Java中的垃圾收集通常是对话中的一个注意点。无论你在实际开发中使用了多少,你仍然需要对其有更深入的了解,这样才不会在对话中崩溃。
本文简要介绍了JVM中常用的几种垃圾收集器的主要特性、使用场景以及最佳建议。
新生代的收集器
老年代的守护者
新生代和老年代的收集器
串行收集器是最基本、最古老的收藏家。开发中。在JDK1.3.1之前,唯一的选择是新一代的HotSpot集合。
运行方案
具有以下特点:
简单高效单CPU,不需要上下文之间的切换,因此效率比较高。
您将在用户不知情的情况下停止所有工作线程。
在用户的任务调度中,可用内存通常不大,垃圾回收可以在短时间内完成
限制对于单CPU环境,Serial收集器没有以下开销改变线材和单线程收集的整体效率
ParNew收集器实际上是Serial收集器的多线程版本。
操作图标主义
多线程版本的Serial可以更有效地利用系统资源
与Serial相同,如果没有用户,所有工作都会被阻塞。了解线程
Server模式下的使用,它是Serial之外的一大亮点,目前它是唯一可以与CMS收集器配合使用的,也是最严重的垃圾收集器。
运行图
具有以下特点:
持续高吞吐量、高效利用CPU、优先吞吐量、精确控制。
根据相应的特性,我们可以很容易地想到它的使用场景,即:当应用程序运行在多个CPU上并且对时间间隔要求不是特别高时,系统进行最多的计算。在后台
SerialOld是Serial收集器一代的版本。
它具有以下特点:
优点和缺点与Serial大致相同。
CMS(ConcurrentMarkSweep)是一个旨在实现最短回收距离的收集器。使用的算法是“标记”的,操作过程分为四步:
操作图标
它有以下特点:
对于。例如服务器服务器上常见的WEB、B/S系统应用。
ParallelOld是ParallelScavenge收集器的旧版本。它使用许多线程和“标记排序”算法来充分利用多核CPU的计算能力。
它具有以下特点:
优缺点,请参考ParallelScavenge收集器。
这样看来,在注重吞吐量、感受CPU资源的场景下,应用ParallelScavenge(新生代)和ParallelOld收集器(老年代)的组合是“惨不忍睹”的
G1(Garbage-First)JDK7-u4是推出商业收集器的版本。集电器技术的进步。
G1需要特定的内存(具体是存储卡)来记录新生代和老年代内存堆的关系。另外,G1中维护内存的成本较高,带来较高的执行负载,影响效率。
据《深入理解Java虚拟机》作者介绍,CMS在小内存应用中表现优于G1,而G1在大内存应用中则有6GB到8GB的内存优势。
我个人认为G1回收商基本上和cms、并行一样都是被压制的。但如果您不追求最终的性能目标,请忽略G1。你基本上可以介绍关于垃圾收集器的许多基本点保持不变。文章如有错误或错误之处,欢迎指出,共同前进!
上一篇:24g内存和16g的区别
下一篇:深入理解java虚拟机第三版