`
flyingdutchman
  • 浏览: 359565 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HotSpot JVM虚拟机:垃圾收集算法、垃圾收集器及其应用

阅读更多
       在Hotspot JVM中,大致有以下四种垃圾收集算法:
       标记-清除(Mark-Sweep)算法:它是最基础的算法,分为2个阶段“标记”和“清除”:首先标记出所有需要回收的对象,在标记完后统一回收掉所有被标的对象。之所以说它是最基础的收集算法,是因为后续的搜集算法都是基于这种思路并改进其缺点而来的。
       标记-清除算法主要有两个缺点:1、标记和清除的效率都不高;2、会产生许多内存速碎片,内存碎片会导致在运行时保分配较大的对象时,由于无法找到连续的内存而不得不提前触发一次垃圾收集操作。

         “标记-清除(Mark-Sweep)”算法示意图

        复制(copying)算法:该算法将JVM可用的内存按容量划分为对等的两块,每次只使用其中的一块,当其中一块使用完后,就将还存活的对象拷贝到另外一块上,然后把已使用过的内存一次清空。
        复制算法优点是实现简单,效率高,但是由于每次只使用一半的内存空间,这就会浪费掉一般的内存容量。
        另外,复制算法在对象存活率较高的情况下要执行较多的复制操作,效率会变低。

        标记-整理(mark-compact)算法:前期标记过程和“标记-清除(Mark-Sweep)”算法一样,但后续操作不是直接清除可回收对象,而是让所有存活的对象都向内存的一端移动,然后直接清理掉边界以外的内存。其示意图如下:

           “标记-整理(mark-compact)”算法示意图

        分代收集算法:当前JAVA商业虚拟机的垃圾收集都是采用“分代收集”算法,该苏算法主要根据对象的存活周期的不同将内存划分为几块。一般是把JAVA的堆分为新生代和老年代,这样就可以根据各个年代的特点采用最恰当的手机算法。新生代中的对象大都“朝生夕死”,只有少量的存活,这样就可以选择复制算法;而老年代中对象因为存活率高、没有额外空间担保,就必须使用“标记-清除”或“标记-整理”算法来回收。


        圾收集器

                               Hotspot JVM 1.6的垃圾收集器种类示意图


         Serial垃圾收集器:单线程的垃圾收集器,适用于新生代。在触发该收集器时,必须暂停其他所有工作线程(该事件被SUN成为“Stop The World”),直到它收集结束。
         “Stop The World”会给用户代码很不好的用户体验。
         ParNew垃圾收集器:Serial收集器的多线程版本,除了使用多个线程进行垃圾回收外,其他行为和Serial收集器完全一样,适用于新生代。
         Parallel Scavenge垃圾收集器:该收集器是使用复制算法、适用于新生代的垃圾收集器,其目的是达到一个可控制的吞吐量(Throughput),从而最高效的利用CPU时间,尽快的完成任务,主要适合在后台运算而不需要太多交互的任务场景。
          Parallel Scavenge垃圾收集器主要提供两个参数用于精确控制吞吐量,分别是控制最大垃圾收集停顿时间的-XX:MaxGCPauseMillis和直接设置吞吐量大小的-XX:GCTimeRatio
          处上述两个参数外,还有一个开关参数-XX:+UseAdaptiveSizePolicy,当设置这个参数后,既不需要手工指定新生代的大小等参数了,虚拟机会根据当前系统的允许情况动态调整这些参数。
          由于与吞吐量关系密切,Parallel Scavenge也被称为“吞吐量优先”的垃圾收集器。
          Serial Old垃圾收集器:老年代的单线程垃圾收集器。另外一个作用就是在CMS并发收集器发生Concurrent Mode Failure时使用。
          Parallel Old垃圾收集器:是Parallel Scavenge收集器的老年代的版本,使用多线程和“标记-整理”算法。该收集器是在JDK1.6中才有的。
          在注重吞吐量和CPU资源敏感的场景中,应首选Parallel Scavenge + Parallel Old的组合。
          CMS垃圾收集器:是以“用户响应优先”的并发垃圾收集器,基于“标记-清楚”算法实现的。
          该收集器执行垃圾回收时不会暂停其他工作线程,即不会发生“Stop The World”,它每次只清除部分垃圾;由于CMS是基于“标记—清除”算法实现的,故会产生大量内存碎片,这会给大对象分配带来大麻烦;于是CMS提供了一个-XX:+UseCMSCompactAtFullCollection的开关参数,该参数会在每次触发一次Full GC后执行一个碎片整理操作,内存整理无法并发操作,于是空间碎片没有了但停顿时间不得不变长,然后就有了另外一个参数-XX:CMSFullGCsBeforeCompaction,用于设置执行多少次不压缩的Full GC后执行一次带压缩的Full GC。
          在注重用户响应体验的场景中,应首选ParNew + CMS的组合。
     
  • 大小: 39.7 KB
  • 大小: 35 KB
  • 大小: 41.4 KB
分享到:
评论

相关推荐

    基于嵌入式Java虚拟机的垃圾收集优化算法应用.pdf

    6. 实际应用分析:本研究通过理论分析与实践相结合的方式,探讨如何将优化后的垃圾收集算法应用到嵌入式Java虚拟机中,并分析算法实施前后的性能差异。这包括但不限于应用程序响应时间、吞吐量、内存占用等性能指标...

    JVM性能调优垃圾收集算法虚拟机组成.zip

    在实际应用中,JVM提供了多种GC策略,如串行GC、并行GC、并发标记清除(CMS)和G1垃圾收集器等。选择合适的GC策略,结合调整新生代和老年代的大小、暂停时间目标(Pause Time Goal)、吞吐量目标等参数,是进行JVM...

    性能工程师指南:玩转OpenJDK HotSpot垃圾收集器

    ### 性能工程师指南:玩转OpenJDK HotSpot垃圾收集器 #### 一、性能工程概述 在软件开发过程中,性能工程是一个重要的环节,它不仅涵盖了对软件性能的需求定义与测试计划制定,还包括了软件的开发、实施及后续的...

    JVM虚拟机源码(C++)

    2. **垃圾收集器**:HotSpot支持多种垃圾回收算法,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和 Garbage First (G1)。这些算法各有优缺点,适应不同的应用场景。 3. **运行时系统**:包括对象模型、内存...

    深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)1

    垃圾收集是Java内存管理的关键,书中详细解析了对象生命周期、可达性分析算法、不同垃圾收集器的特性和选择。比如,Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS和G1等收集器各有优劣,适应...

    深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明1

    《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》是一本全面解析Java虚拟机的著作,作者周志明以其深厚的Java技术背景,深入剖析了Java技术体系,尤其是Java虚拟机(JVM)的工作原理及其高级特性。...

    性能工程师指南:玩转OpenJDK HotSpot垃圾收集器(83页).pdf

    《性能工程师指南:玩转OpenJDK HotSpot垃圾收集器》是一本专注于Java应用程序性能优化的专业书籍,尤其针对OpenJDK HotSpot虚拟机的垃圾收集器进行了深入探讨。该书共83页,旨在帮助性能工程师理解并优化Java应用的...

    深入浅出jvm虚拟机视频大全(jvm性能调优+内存模型+虚拟机原理)

    不同垃圾收集器有着不同的特点和适用场景,选择合适的垃圾收集器可以显著提高应用性能。例如,在追求低延迟的应用场景中,可以选择CMS或G1收集器。 #### 3. 监控与分析工具的使用 使用JVisualVM、JConsole等工具...

    JDK7底层C++源码及hotspot虚拟机源码

    CMS收集器采用并发标记清理算法,旨在减少长时间停顿,而G1收集器则引入了区域划分和并行/并发执行,进一步优化了大型应用的性能。 此外,JDK7中的动态语言支持也是源码分析的重要部分。JDK7引入了 invokedynamic ...

    jvm虚拟机源码学习资料

    JVM的内存管理核心是垃圾收集,包括新生代、老年代的划分,不同的垃圾收集算法(如复制算法、标记-清除算法、标记-整理算法、分代收集等),以及GC(Garbage Collection)停顿时间、内存占用等优化策略。...

    Java高级面试JVM虚拟机、内存结构、垃圾回收机制

    此外,了解不同JVM实现之间的差异和选择,以及如何针对特定应用选择合适的JVM和垃圾回收器,也是面试中可能涉及的话题。因此,对JVM的深入学习和实践对于提升Java程序员的专业技能和职业发展有着不可忽视的作用。

    Java虚拟机讲解笔记.docx

    JVM的核心功能包括内存管理、垃圾收集、安全性和平台独立性。 #### 二、内存区域详解 ##### 1. 堆 (Heap) - **功能**: 存储所有由new关键字创建的对象和数组。 - **生命周期**: 对象的整个生命周期。 - **垃圾...

    深入java虚拟机源码

    《深入Java虚拟机源码》一书主要涵盖了Java虚拟机(JVM)的内部工作原理,包括类加载机制、内存管理、字节码执行引擎、垃圾收集算法、编译优化等多个核心主题。以下是对这些章节内容的详细阐述: 1. **第3章:类...

    Java 虚拟机JVM内存模型

    ### Java 虚拟机JVM内存模型知识点 #### 1. JVM概述 ##### 1.1 Java的特性与JVM的应用 ...在实际开发过程中,合理配置JVM参数、选择合适的垃圾收集器和优化内存分配策略是提升Java应用性能的关键。

    解密Java虚拟机(带目录)

    常见的垃圾收集算法有标记-清除、复制、标记-整理和分代收集等。 5. **内存模型(Java Memory Model, JMM)**:定义了线程之间的共享变量如何交互和可见性。 volatile关键字、synchronized和final关键字都在此模型...

    JAVA虚拟机精讲 pdf

    本书以极其精练的语句诠释了HotSpot VM 的方方面面,比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法、垃圾收集器...

    JAVA虚拟机精讲

    比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法、垃圾收集器(重点讲解了Serial 收集器、ParNew 收集器、Parallel ...

    hotspot-virtual-machine-garbage-collection-tuning-guide.pdf

    《Java平台标准版HotSpot虚拟机垃圾收集调优指南》是针对Java HotSpot虚拟机(Java HotSpot VM)内建的垃圾收集算法的一份详细指南,旨在帮助开发者和系统管理员选择最适合他们应用需求的垃圾收集策略。这份文档适用...

    JVM 知识点整理:GC垃圾收集器及相关算法

    Java虚拟机(JVM)是Java程序运行的基础,其中垃圾收集器(GC)是负责自动管理内存的关键组件。GC的主要任务是识别并回收不再使用的对象,以释放内存资源。这里我们将详细探讨几种垃圾收集器和相关算法。 首先,...

    Java虚拟机JVM面试题目

    Java虚拟机(JVM)是Java程序的运行环境,它负责编译、加载、执行Java字节码,并提供了垃圾回收、内存管理、安全机制等功能。下面是JVM面试题目相关的知识点: 一、JVM架构 JVM包含两个子系统和两个组件,两个子...

Global site tag (gtag.js) - Google Analytics