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

常用的垃圾收集器

阅读更多

垃圾收集器

 

   垃圾收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现。Java虚拟机规范中没有对垃圾收集器应该如何实现并没有任何规定。这里讨论的收集器基于Sun HotSpot虚拟机1.6版Update 22。针对具体引用场景选择最合适的收集器。

  

  1 Serial 收集器

 

       Serial 收集器是最基本,最历史悠久的收集器。它在垃圾收集的时,必须暂停其他的所有工作-Stop the World,直到它收集结束。

      

       在单个CPU环境下,Serial 收集器由于没有哦线程交互的开销,专心做垃圾收集可以获得最高的单线程收集效率。Serial 收集器对于运行在Client模式下的虚拟机来说是个很好的选择。

     

 

  2 ParNew 收集器

 

       ParNew 收集器其实就是Serial 收集器的多线程版本,作为一个老年代收集器。

      

       ParNew收集器是许多运行在Server模式下的虚拟机中的首选新生代收集器。除了Serial 收集器外,目前只有它与CMS收集器配合工作。

      

 

  3 Parallel Scavenge收集器

 

       Parallel Scavenge收集器也是一个新生代收集器,使用复制算法的收集器,并行的多线程收集器。

 

       Parallel Scavenge收集器的目标是达到一个可控制的吞吐量(Throughput)。所谓的吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值。CMS收集器关注点尽可能缩短垃圾收集时用户线程的停顿时间。Parallel Scavenge收集器被称为“吞吐量优先”收集器。

 

       停顿时间越短越适合需要与用户交互的程序,良好的响应速度的能提升用户的体验,而搞吞吐量则可以最高效率地利用CPU时间,尽快地完成程序的运算任务,主要适合在后台运算而不需要太多的交互任务。

 

  4 Serial Old 收集器

 

       Serial Old 是Serial 收集器的老年代版本,同样是一个单线程收集器,使用“标记-清除”算法。

 

       该收集器主要也是在Client模式下的虚拟机使用。如果在Server模式下,主要还有两个用途一个在jdk1.5及以前版本与Parallel Scavenge收集器搭配使用,另外一个就是作为CMS收集器的后背预案。

     

 

  5 Parallel Old 收集器

 

       Parallel Old  是 Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。这个收集器是在jdk1.6中才开始提供。

 

       知道Parallel Old 收集器出现后,“吞吐量优先”收集器终于有了比较名副其实的引用组合,在注重

吞吐量及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old 收集器。

 

  6 CMS (Concurrent Mark Sweep)收集器

 

       CMS 收集器是一种以获取最短回收停顿时间为目标的收集器。CMS 收集器是基于“Mark Sweep”算法。

 

       CMS收集器回收过程分为4个步骤:初始标记,并发标记,重新标记,并发清除。其初始标记和重新标记这两个步骤需要“Stop The World”。初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快,并发阶段就是进行GC Roots Tracing的过程,而重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。

 

       CMS三个显著的缺点:

        1 CMS收集器对CPU资源非常敏感。

        2 CMS收集器无法处理浮动垃圾,可能出现“Concurrent Mode Failure”失败而导致另一次Full GC产生。

        3 CMS是一款基于“Mark Sweep”算法实现的收集器,将会产生空间碎片。

                

            
  7 G1(Garbage First) 收集器

 

     G1回收时,将整个Java堆划分为多个大小固定的独立区域,并且跟踪这些区域里面的垃圾堆积程度,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾堆积最多的区域(这就是Garbage First名称的由来)。区域划分及有优先级的区域回收,保证了G1收集器在有限的时间内可以获得最高的收集效率。

 

     G1收集器是当前收集器技术发展最前沿成果,G1与CMS相比有两个显著的改进:

      

        1 G1收集器是基于“标记-整理”算法实现的垃圾收集器,也就是不会产生空间碎片。

 

        2 它可以非常精确地控制停顿,即能让使用者明确指定已合格长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒。

 

分享到:
评论

相关推荐

    深入理解JVM垃圾收集算法与垃圾收集器

    深入理解JVM垃圾收集算法与垃圾收集器

    Java的垃圾收集器(GC)

    ### Java的垃圾收集器(GC)详解 #### 引言 垃圾收集器(Garbage Collector,简称GC)是Java语言的一项重要特性,它自动化管理内存,显著减轻了开发者手动管理内存负担,避免了常见的内存泄漏问题,提高了程序的...

    漫谈Java垃圾收集器.pdf

    漫谈Java垃圾收集器 Java垃圾收集器是Java虚拟机(JVM)中的一种自动内存管理机制,旨在释放程序员从手动内存管理的繁琐工作中解脱出来。垃圾收集器通过跟踪对象的引用关系,确定哪些对象是可以被释放的,然后将其...

    Java垃圾收集器使用小诀窍

    Java垃圾收集器使用小诀窍详解 Java垃圾收集器是Java虚拟机(JVM)中一个非常重要的组件,它负责管理Java程序中的内存资源,防止内存泄露和溢出。垃圾收集器的使用小诀窍可以帮助开发者写出高效的Java程序,避免...

    1_Java虚拟机(垃圾收集器和算法).pdf

    本文详细探讨了JVM中的垃圾收集器和垃圾收集算法,以帮助开发者深入理解Java虚拟机的内部运作机制。 垃圾收集(GC,Garbage Collection)是JVM的一个重要功能,用于自动释放不再使用的对象所占用的内存空间,以防止...

    7种JVM垃圾收集器特点-优劣势-及使用场景.pdf

    "JVM垃圾收集器特点、优劣势及使用场景" JVM垃圾收集器是Java虚拟机(JVM)中的一种自动内存管理机制,负责回收Java程序中不再使用的对象,以避免内存泄漏和提高程序性能。Java中有多种垃圾收集器,每种垃圾收集器...

    Java理解G1垃圾收集器.pdf

    Java的G1(Garbage First)垃圾收集器是一种先进的垃圾回收机制,主要设计目标是实现低延迟、高吞吐量的内存管理。G1垃圾收集器是Java虚拟机(JVM)的一部分,它引入了区域(Region)的概念,将堆内存划分为多个固定...

    基于慧鱼模型的水上垃圾收集器设计.doc

    基于慧鱼模型的水上垃圾收集器设计.doc

    JVM初探- 内存分配、GC原理与垃圾收集器

    JVM内存管理是Java虚拟机的核心机制之一,其主要包含对象的创建、内存分配、...通过对内存分配策略、对象生死判定、垃圾收集算法和垃圾收集器的理解与应用,可以更好地掌握JVM的内存管理,从而提升应用性能和稳定性。

    Java垃圾收集器推荐.pdf

    Java垃圾收集器是Java语言的重要特性,它负责自动管理程序中的内存空间,避免手动内存管理带来的问题,如内存泄漏。垃圾收集器通过一个系统级的线程——垃圾收集线程来工作,它会在Java虚拟机(JVM)空闲时检查并...

    Java垃圾收集器参考.pdf

    Java垃圾收集器是Java语言的核心特性之一,它自动化地处理内存管理,使得程序员无需手动回收内存,从而减少了潜在的内存泄漏问题。Java虚拟机(JVM)中的垃圾收集器通过一个低优先级的线程——垃圾收集器线程来监控...

    2-7垃圾收集器G1&ZGC详解.mp4

    2-7垃圾收集器G1&ZGC详解.mp4

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

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

    JVM垃圾收集器全面详解

    Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾收集器(Garbage Collector, GC)。本文将全面解析JVM中的七种垃圾收集器,分析它们的特性和适用场景,帮助开发者理解如何优化Java应用的内存...

    Java垃圾收集器知识.pdf

    Java垃圾收集器是Java编程语言的核心特性之一,它自动化地管理程序的内存空间,极大地简化了内存管理的工作,避免了手动回收内存可能导致的错误和内存泄漏问题。以下是对Java垃圾收集器的详细解析: 1. **工作原理*...

    计算机专业外文翻译(Java垃圾收集器)

    Java垃圾收集器是Java语言中的一个关键特性,它负责自动管理程序中的内存,尤其是在对象生命周期结束时进行内存的释放。这篇3000字的毕业设计论文外文翻译主要探讨了Java垃圾收集器的工作原理及其对性能的影响。 在...

    04-VIP-JVM垃圾收集器详解1

    在Java世界中,JVM垃圾收集器是内存管理的重要组成部分,负责自动回收不再使用的对象,以释放内存空间。垃圾收集器的选取并非一成不变,而是需要根据具体应用的需求和环境来定制。本文将详细解析几种常见的JVM垃圾...

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    1.5CMS(Current Mark Sweep)收集器 1.6G1收集器 第六节:JVM参数调优 1.1 JVM重要参数介绍 1.2JVM参数调优 1.3JVM参数设置思路1.4JVM调优常用指令说明 第七节:JVM项目实战 1.1案例背景 1.2排查步骤 1.3....

    【Java正来-Java虚拟机专题】-Java垃圾收集器与内存分配策略

    主要整理内容为:分析了垃圾收集的算法和JDK1.7中提供的7款垃圾收集器的特点以及运作原理。以及内存分配策略

Global site tag (gtag.js) - Google Analytics