简述:
上一篇系统学习了各种垃圾算法。现在就看看jvm(HopSpot)提供了那些垃圾收集器,怎样搭配使用。先回忆了,然后思考以下问题:新生代和老年代分别用什么算法合适?
Serial收集器
略懂英文的同学大概明白这个词的意思,串行,连续的。没错,这个收集器很简单,当要进行gc时,就暂停所有线程。用复制算法执行完,继续所有线程。又用餐巾纸的例子来说明,清洁大妈高喊一声“stop”,然后所有人静止不动,等收集完,大伙又继续吃饭。有些java程序平时运行正常,隔一段时间“假死”,很可能与它有关。这个收集器看起来问题多多,但是简单高效,适用于实时性不高的场合,如客户端软件。对于服务端程序,就有些不合适了
ParNew收集器
Par是Parallel(并行)的缩写。这个收集器是Serial的多线程版本,算法都是一样的。在多CPU环境下,gc的速度会快很多,减少gc的时间。不幸的是,还是要暂停用户线程
Parallel Scavenge收集器
也是一个并行的收集器,使用的算法同样是复制算法。它的特别之处在于可以控制垃圾收集停顿的时间,从而达到控制吞吐量的目的。例如,收集100m的对象需要100毫秒,你可以选择停顿时间为10毫秒,那么它每次gc最多不超过10毫秒,但是gc的频率肯定会增加。所以盲目调低,可能适得其反
Serial Old收集器
是老年代的Serial版本,单线程,用标记-整理算法。原理类似Serial收集器
Parallel Old收集器
是Serial Old的多线程版本。
CMS收集器
全称 Concurrent Mark Sweep。表明它是并发的,使用标记-清除算法。它的设计比较巧妙,将部分操作与用户线程并发执行,这样就可以显著减少暂停的时间了。共四个过程:
1.初始标记-需要暂停用户线程,标记GC Roots能直接关联到的对象。
2.并发标记-进行跟搜索。
3.重新标记-修正并发标记期间,一些用户操作导致的标志变动。
4.并发清除-与用户线程一起执行,清除被标记的对象。
不足之处有:
1.跟用户线程竞争,导致性能降低。
2.无法处理Float Garbage,就是标记之后,生成的垃圾,这时并发清除是无法发现的。如果这部分垃圾数量比较大,可能引发”Concurrent Mode Failure”,虚拟机会启动预备方案,调用Serial Old收集品,暂停时间可能大大加长。
3.标记-清除算法的弱点是垃圾碎片比较多,可能过早引发Full Gc
Garbage first收集器
这个是比较新的收集器,目前还未正式商用。它的优点有1.使用了“标记-整理”算法,不会产生内存碎片。2.可以精确控制停顿。这优点像Parallel Scavenge收集品,但是它使用了更优秀的方案,后台维护了一个优秀列表,避免全区域扫描,优先回收垃圾最多的区域,可以使得最短的时间内回收最多的垃圾
总结
几种比较合适的方案
1.ParNew + CMS (推荐)
2.Serial + CMS
3.Parallel Scavenge + Parallel Old
参考资料
1.深入java虚拟机
2.深入理解java虚拟机
更多关于jvm的内容可以访问 www.iamcoding.com
分享到:
相关推荐
### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...
Java虚拟机(JVM)是Java程序的核心组成部分,它负责执行字节码并管理内存。在JVM的学习中,理解其内存模型...在实际开发中,理解JVM的工作原理对于解决内存问题、选择合适的垃圾收集器和调整内存配置都具有重要意义。
本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...
### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...
2. **选择合适的垃圾收集器**:不同的GC算法适用于不同的应用场景,选择能平衡吞吐量和响应时间的收集器。 3. **监控和诊断**:使用JMX(Java Management Extensions)或专门的工具如VisualVM,对JVM的内存使用和...
JVM的学习可以从其基本结构、代码编译和执行过程,以及内存管理和垃圾回收机制三个方面进行深入探讨。 首先,JVM的基本结构分为逻辑结构和物理结构。逻辑结构主要包括Java源码编译器、JVM执行引擎、类加载器等组件...
1. 参数调整:通过设置JVM启动参数,如-Xms、-Xmx控制堆大小,-XX:+UseG1GC选择垃圾收集器,-XX:MaxHeapFreeRatio、-XX:MinHeapFreeRatio设定内存利用率等。 2. 内存调优:根据应用特点调整新生代、老年代的比例,...
4. **垃圾收集**:JVM如何自动管理内存,理解不同垃圾收集器如Serial、Parallel、CMS、G1等的工作机制,以及新生代和老年代的概念。 5. **类加载器**:系统类加载器、扩展类加载器和应用程序类加载器之间的双亲委派...
**JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...
此外,JVM还提供了垃圾收集器,如Serial、Parallel、CMS和G1等,它们有不同的性能特性和适用场景。 JVM的性能优化主要关注以下几个方面:内存调优,如调整堆大小、新生代与老年代的比例;类加载优化,避免类的频繁...
### JVM学习笔记核心知识点整理 #### 一、引言与背景 随着软件开发技术的不断发展,Java作为一种广泛应用的编程语言,其背后的核心技术——Java虚拟机(JVM)的重要性日益凸显。掌握JVM不仅可以帮助开发者更好地理解...
《JVM学习笔记》 Java虚拟机(JVM)是Java平台的核心组成部分,它负责运行所有的Java应用程序。这篇笔记将深入探讨JVM的工作原理、内存管理、类加载机制以及优化策略,帮助读者全面理解JVM并提升Java程序的性能。 ...
JVM允许Java代码跨平台运行,通过解释器、类加载器、垃圾收集器等组件实现“一次编写,到处运行”的理念。 1. **JVM结构**:JVM主要包括类装载器、运行数据区、执行引擎、本地方法接口和本地库。类装载器负责加载类...
JVM的垃圾收集机制负责自动回收不再使用的对象所占用的内存,主要有标记-清除、复制、标记-整理和分代收集等算法。理解垃圾收集的工作原理,可以帮助我们设置合理的内存参数,避免Full GC的发生,提高应用的响应速度...
本文将根据"JVM性能学习笔记思维导图"的主题,详细阐述JVM的主要组成部分,性能调优的关键点以及相关的工具与实践策略。** 1. **JVM结构与内存模型** - **类装载器(ClassLoader)**:负责加载类文件,确保类在运行...
《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...
5. **Java 6与并行GC**:2006年,Java 6增强了垃圾回收器,引入了并行和并发的垃圾回收策略,提升了多线程环境下的性能。 6. **Java 7与G1 GC**:2011年,Java 7引入了G1(Garbage First)垃圾回收器,它是一种并行...
这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键知识点的详细解析: 1. **JVM概述**: - JVM是Java平台的核心组成部分,它是一个运行Java字节...
【描述】"ImagesForJVM——JVM笔记图片" 暗示这些图片可能是教学或学习笔记的一部分,旨在通过视觉化的方式解释JVM的关键概念,如内存模型、类加载机制、垃圾收集以及性能优化等方面。 【标签】"java" 明确了这些...