JAVA垃圾收集器之概说

1、垃圾收集器的组合

JAVA垃圾收集器一共有7个,减去还没有正式大规模使用的G1,还有6个,其中新生代3个,老生代3个。

因为垃圾收集器都是一组一组的工作,这6个收集器一共构成了5中使用模式。


参数


描述


-XX:+UseSerialGC


Jvm运行在Client模式下的默认值,打开此开关后,使用Serial + Serial Old的收集器组合进行内存回收


-XX:+UseParNewGC


打开此开关后,使用ParNew + Serial Old的收集器进行垃圾回收


-XX:+UseConcMarkSweepGC


使用ParNew + CMS +  Serial Old的收集器组合进行内存回收,Serial Old作为CMS出现“Concurrent Mode Failure”失败后的后备收集器使用。


-XX:+UseParallelGC


Jvm运行在Server模式下的默认值,打开此开关后,使用Parallel Scavenge +  Serial Old的收集器组合进行回收


-XX:+UseParallelOldGC


使用Parallel Scavenge +  Parallel Old的收集器组合进行回收

我自己阅读周志明先生的著作《深入理解JAVA虚拟机》,其中3.4章节(55页)有一张垃圾收集器的图。其中新生代的serial收集器和老生代的CMS收集器,并没有直接的调用方法,因此参考这块的内容,我重新画了一张图,以便让自己理解。

2、垃圾收集器组合关系图例

常用的6个垃圾收集器,由这五个方法进行调度和使用。

3、部分JVM参数

一些其他的JAVA虚拟机的参数,以便需要的时候查阅。


-XX:SurvivorRatio


新生代中Eden区域与Survivor区域的容量比值,默认为8,代表Eden:Subrvivor = 8:1


-XX:PretenureSizeThreshold


直接晋升到老年代对象的大小,设置这个参数后,大于这个参数的对象将直接在老年代分配


-XX:MaxTenuringThreshold


晋升到老年代的对象年龄,每次Minor GC之后,年龄就加1,当超过这个参数的值时进入老年代


-XX:UseAdaptiveSizePolicy


动态调整java堆中各个区域的大小以及进入老年代的年龄


-XX:+HandlePromotionFailure


是否允许新生代收集担保,进行一次minor gc后, 另一块Survivor空间不足时,将直接会在老年代中保留


-XX:ParallelGCThreads


设置并行GC进行内存回收的线程数


-XX:GCTimeRatio


GC时间占总时间的比列,默认值为99,即允许1%的GC时间,仅在使用Parallel Scavenge 收集器时有效


-XX:MaxGCPauseMillis


设置GC的最大停顿时间,在Parallel Scavenge 收集器下有效


-XX:CMSInitiatingOccupancyFraction


设置CMS收集器在老年代空间被使用多少后出发垃圾收集,默认值为68%,仅在CMS收集器时有效,-XX:CMSInitiatingOccupancyFraction=70


-XX:+UseCMSCompactAtFullCollection


由于CMS收集器会产生碎片,此参数设置在垃圾收集器后是否需要一次内存碎片整理过程,仅在CMS收集器时有效


-XX:+CMSFullGCBeforeCompaction


设置CMS收集器在进行若干次垃圾收集后再进行一次内存碎片整理过程,通常与UseCMSCompactAtFullCollection参数一起使用


-XX:+UseFastAccessorMethods


原始类型优化


-XX:+DisableExplicitGC


是否关闭手动System.gc


-XX:+CMSParallelRemarkEnabled


降低标记停顿


-XX:LargePageSizeInBytes


内存页的大小不可设置过大,会影响Perm的大小,-XX:LargePageSizeInBytes=128m

4、JDK GC组合方式的一些特性


 


新生代GC方式


老年代和持久代GC方式


-XX:+UseSerialGC


Serial 串行GC


Serial Old 串行GC


-XX:+UseParallelGC


Parallel Scavenge  并行回收GC


Serial Old 串行GC


-XX:+UseConcMarkSweepGC


ParNew 并行GC


CMS 并发GC

当出现“Concurrent Mode Failure”时

采用Serial Old 串行GC


-XX:+UseParNewGC


ParNew 并行GC


Serial Old 串行GC


-XX:+UseParallelOldGC


Parallel Scavenge  并行回收GC


Parallel Old 并行GC


-XX:+UseConcMarkSweepGC

-XX:+UseParNewGC


Serial 串行GC


CMS 并发GC

当出现“Concurrent Mode Failure”时

采用Serial Old 串行GC

时间: 2024-07-30 08:07:36

JAVA垃圾收集器之概说的相关文章

Java垃圾收集器之--Garbage-First Collector

简介       Garbage-First(G1)垃圾收集器全面支持JDK7 Upate 4及后续版本.G1收集器是一个服务器形式(server-style)的垃圾收集器,主要用于内存大.多处理器的机器.当您想实现:与应用程序线程并发的执行全局标记,并且有高吞吐量.面向整个堆操作时,它可以满足您高可用性及GC暂停时间的要求. 此举可有效防止中断(GC时的暂停时间)与堆或者实时数据大小成比例增涨. 技术 G1收集器通过如下技术来实现高性能和低暂停时间: 堆被划分成一组相同大小的堆区域(heap

JAVA垃圾收集器之Serial Old收集器

Serial Old收集器是JAVA虚拟机中垃圾收集器的一种,它是Serial收集器的老年代版本,它同样是一个单线程收集器,使用"标记-整理"算法.这个收集器的主要也是在目前的JAVA的Client模式下的虚拟机使用.如果在Server模式下,它主要还有两大用途:一个是在JDK 1.5及之前的版本中与Parallel Scavenge收集器搭配使用,另外一个就是作为CMS收集器的后备预案.如果CMS收集器出现Concurrent Mode Failure,则Serial Old收集器将

JAVA垃圾收集器之Parallel Old收集器

Parallel Old收集器是JAVA虚拟机中垃圾收集器的一种.和Serial Old收集器一样,工作在JAV虚拟机的老年代.这种垃圾收集器使用多线程和"标记-整理"算法.它在JDK 1.6中才开始提供. 在注重吞吐量及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old收集器. 1.运行代码 package com.gc; import java.util.ArrayList; import java.util.List; /** * 简

JAVA垃圾收集器之CMS收集器

1.特点 CMS收集器是JAVA虚拟机中垃圾收集器的一种.它运行在JAVA虚拟机的老年代中.CMS是(Concurrent MarkSweep)的首字母缩写.CMS收集器是一种以获取最短回收停顿时间为目标的收集器.比较适用于互联网等场合,可能是互联网中最重要的收集器模式: 2.优点 由于整个过程中耗时最长的并发标记和并发清除过程中,收集器线程都可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行的.因此CMS是一款优秀的收集器,具备了并发收集.低停顿的优点

JAVA垃圾收集器之Serial收集器

1.特点 Serial收集器是JAVA虚拟机中最基本.历史最悠久的收集器,在JDK 1.3.1之前是JAVA虚拟机新生代收集的唯一选择.Serial收集器是一个单线程的收集器,但它的"单线程"的意义并不仅仅是说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束. 要是服务器每运行一个小时就会暂停5分钟,老板会有什么样的心情? 2.发展 从JDK 1.3开始,一直到现在还没正式发布的JDK 1.7,HotSpo

JAVA垃圾收集器之ParNew收集器

1.特点 ParNew收集器是JAVA虚拟机中垃圾收集器的一种.它是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为包括Serial收集器可用的所有控制参数(例如:-XX:SurvivorRatio.-XX:PretenureSizeThreshold.-XX:HandlePromotionFailure等).收集算法.Stop The World.对象分配规则.回收策略等都与Serial收集器一致. 2.现状 ParNew是许多运行在Server模式下的虚拟机中首选的

JAVA垃圾收集器之Parallel Scavenge收集器

Parallel Scavenge收集器是JAVA虚拟机中垃圾收集器的一种.和ParNew收集器类似,是一个新生代收集器.使用复制算法的并行多线程收集器. 1.特点 Parallel Scavenge收集器的关注点与其他收集器不同, ParallelScavenge收集器的目标则是达到一个可控制的吞吐量(Throughput).所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量 = 运行用户代码时间 /(运行用户代码时间 + 垃圾收集时间),虚拟机总共运行了100分钟,

【转】Java垃圾收集器

原文链接 http://www.cnblogs.com/gw811/archive/2012/10/19/2730258.html#top Java垃圾收集器 概述 说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物.事实上,GC的历史远远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言.当Lisp还在胚胎时期时,人们就在思考: GC需要完成的三件事情: 哪些内存需要回收? 什么时候回收? 如

【深入Java虚拟机】之二:Java垃圾收集机制

[深入Java虚拟机]之:Java垃圾收集机制 对象引用 Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了Java中所有的对象实例.谈到Java堆中的垃圾回收,自然要谈到引用.在JDK1.2之前,Java中的引用定义很很纯粹:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用.但在JDK1.2之后,Java对引用的概念进行了扩充,将其分为强引用(Strong Reference).软引用(Soft Reference).弱引用(