`
janeky
  • 浏览: 365996 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jvm学习笔记(5)垃圾收集器介绍

    博客分类:
  • jvm
阅读更多

  • 简述:
  • 上一篇系统学习了各种垃圾算法。现在就看看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概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...

      jvm学习笔记(jvm内存模型&垃圾收集算法&类加载机制)

      Java虚拟机(JVM)是Java程序的核心组成部分,它负责执行字节码并管理内存。在JVM的学习中,理解其内存模型...在实际开发中,理解JVM的工作原理对于解决内存问题、选择合适的垃圾收集器和调整内存配置都具有重要意义。

      JVM学习笔记.docx

      本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...

      JVM学习笔记

      ### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...

      jvm学习笔记.zip

      2. **选择合适的垃圾收集器**:不同的GC算法适用于不同的应用场景,选择能平衡吞吐量和响应时间的收集器。 3. **监控和诊断**:使用JMX(Java Management Extensions)或专门的工具如VisualVM,对JVM的内存使用和...

      jVM学习笔记.ppt

      JVM的学习可以从其基本结构、代码编译和执行过程,以及内存管理和垃圾回收机制三个方面进行深入探讨。 首先,JVM的基本结构分为逻辑结构和物理结构。逻辑结构主要包括Java源码编译器、JVM执行引擎、类加载器等组件...

      JVM学习资料+笔记

      1. 参数调整:通过设置JVM启动参数,如-Xms、-Xmx控制堆大小,-XX:+UseG1GC选择垃圾收集器,-XX:MaxHeapFreeRatio、-XX:MinHeapFreeRatio设定内存利用率等。 2. 内存调优:根据应用特点调整新生代、老年代的比例,...

      jvm视频及笔记

      4. **垃圾收集**:JVM如何自动管理内存,理解不同垃圾收集器如Serial、Parallel、CMS、G1等的工作机制,以及新生代和老年代的概念。 5. **类加载器**:系统类加载器、扩展类加载器和应用程序类加载器之间的双亲委派...

      JVM 学习笔记(Java虚拟机)

      **JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...

      JVM工作原理学习笔记

      此外,JVM还提供了垃圾收集器,如Serial、Parallel、CMS和G1等,它们有不同的性能特性和适用场景。 JVM的性能优化主要关注以下几个方面:内存调优,如调整堆大小、新生代与老年代的比例;类加载优化,避免类的频繁...

      JVM学习笔记核心知识点整理

      ### JVM学习笔记核心知识点整理 #### 一、引言与背景 随着软件开发技术的不断发展,Java作为一种广泛应用的编程语言,其背后的核心技术——Java虚拟机(JVM)的重要性日益凸显。掌握JVM不仅可以帮助开发者更好地理解...

      jvm学习笔记

      《JVM学习笔记》 Java虚拟机(JVM)是Java平台的核心组成部分,它负责运行所有的Java应用程序。这篇笔记将深入探讨JVM的工作原理、内存管理、类加载机制以及优化策略,帮助读者全面理解JVM并提升Java程序的性能。 ...

      JVM的学习笔记PDF版

      JVM允许Java代码跨平台运行,通过解释器、类加载器、垃圾收集器等组件实现“一次编写,到处运行”的理念。 1. **JVM结构**:JVM主要包括类装载器、运行数据区、执行引擎、本地方法接口和本地库。类装载器负责加载类...

      JVM笔记(阳哥).zip

      JVM的垃圾收集机制负责自动回收不再使用的对象所占用的内存,主要有标记-清除、复制、标记-整理和分代收集等算法。理解垃圾收集的工作原理,可以帮助我们设置合理的内存参数,避免Full GC的发生,提高应用的响应速度...

      JVM性能学习笔记思维导图

      本文将根据"JVM性能学习笔记思维导图"的主题,详细阐述JVM的主要组成部分,性能调优的关键点以及相关的工具与实践策略。** 1. **JVM结构与内存模型** - **类装载器(ClassLoader)**:负责加载类文件,确保类在运行...

      JVM内存管理学习笔记

      《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...

      JVM历史发展和内存回收笔记

      5. **Java 6与并行GC**:2006年,Java 6增强了垃圾回收器,引入了并行和并发的垃圾回收策略,提升了多线程环境下的性能。 6. **Java 7与G1 GC**:2011年,Java 7引入了G1(Garbage First)垃圾回收器,它是一种并行...

      狂神说JVM探究.rar

      这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键知识点的详细解析: 1. **JVM概述**: - JVM是Java平台的核心组成部分,它是一个运行Java字节...

      ImagesForJVM-JVM笔记图片

      【描述】"ImagesForJVM——JVM笔记图片" 暗示这些图片可能是教学或学习笔记的一部分,旨在通过视觉化的方式解释JVM的关键概念,如内存模型、类加载机制、垃圾收集以及性能优化等方面。 【标签】"java" 明确了这些...

    Global site tag (gtag.js) - Google Analytics