Java经过近20年的演变,已经发展出一套复杂、健壮和高性能的垃圾收集器。在不同的应用场合下使用不同的GC组合能让程序性能得到可观提高。我想这也是Java这么多年来一直处于不败之地的原因之一。以下讨论只限于Server模式下的HotSpot JVM。GC的类型Sun/Oracle的HotSpot JVM为我们提供了多种不同的GC,一种GC只专门负责新生代或老年代的内存回收工作,所以实际使用的时候需要...
分类:
编程语言 时间:
2015-04-18 06:29:24
阅读次数:
174
Parallel Old收集器是JAVA虚拟机中垃圾收集器的一种。和Serial Old收集器一样,工作在JAV虚拟机的老年代。这种垃圾收集器使用多线程和“标记-整理”算法。它在JDK
1.6中才开始提供。
在注重吞吐量及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel
Old收集器。
1、运行代码
package com.gc;
im...
分类:
编程语言 时间:
2015-01-19 17:20:48
阅读次数:
668
1、特点
CMS收集器是JAVA虚拟机中垃圾收集器的一种。它运行在JAVA虚拟机的老年代中。CMS是(Concurrent
MarkSweep)的首字母缩写。CMS收集器是一种以获取最短回收停顿时间为目标的收集器。比较适用于互联网等场合,可能是互联网中最重要的收集器模式;
2、优点
由于整个过程中耗时最长的并发标记和并发清除过程中,收集器线程都可以与用户线程一起工作,所以总体上来说,CM...
分类:
编程语言 时间:
2015-01-19 17:19:50
阅读次数:
236
Serial Old收集器是JAVA虚拟机中垃圾收集器的一种,它是Serial收集器的老年代版本,它同样是一个单线程收集器,使用“标记-整理”算法。这个收集器的主要也是在目前的JAVA的Client模式下的虚拟机使用。如果在Server模式下,它主要还有两大用途:一个是在JDK
1.5及之前的版本中与Parallel Scavenge收集器搭配使用,另外一个就是作为CMS收集器的后备预案。如果...
分类:
编程语言 时间:
2015-01-19 17:19:07
阅读次数:
253
1、垃圾收集器的组合
JAVA垃圾收集器一共有7个,减去还没有正式大规模使用的G1,还有6个,其中新生代3个,老生代3个。
因为垃圾收集器都是一组一组的工作,这6个收集器一共构成了5中使用模式。
参数
描述
-XX:+UseSerialGC
Jvm运行在Client模式下的默认值,打开此开关后,使用Serial + Serial Old的...
分类:
编程语言 时间:
2015-01-19 15:55:08
阅读次数:
242
1、特点
ParNew收集器是JAVA虚拟机中垃圾收集器的一种。它是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为包括Serial收集器可用的所有控制参数(例如:-XX:SurvivorRatio、-XX:PretenureSizeThreshold、-XX:HandlePromotionFailure等)、收集算法、Stop
The World、对象分配规则、回...
分类:
编程语言 时间:
2015-01-19 14:26:11
阅读次数:
341
1、特点
Serial收集器是JAVA虚拟机中最基本、历史最悠久的收集器,在JDK 1.3.1之前是JAVA虚拟机新生代收集的唯一选择。Serial收集器是一个单线程的收集器,但它的“单线程”的意义并不仅仅是说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。
要是服务器每运行一个小时就会暂停5分钟,老板会有什么样...
分类:
编程语言 时间:
2015-01-19 14:25:59
阅读次数:
246
Parallel Scavenge收集器是JAVA虚拟机中垃圾收集器的一种。和ParNew收集器类似,是一个新生代收集器。使用复制算法的并行多线程收集器。
1、特点
Parallel Scavenge收集器的关注点与其他收集器不同, ParallelScavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值...
分类:
编程语言 时间:
2015-01-19 14:25:01
阅读次数:
312
垃圾收集器是内存回收算法的具体实现。下图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。 Serial收集器:串行收集器 一个单线程的收集器,但它的单线程的意义不仅仅是说明它只会使用一个CPU或一条线程去完...
分类:
编程语言 时间:
2014-08-14 10:55:38
阅读次数:
329
之前的两篇文章(java运行时数据区浅析、java垃圾收集器(GC)浅析)介绍了java运行时数据区以及GC垃圾回收算法的相关知识,大家可以先去看看这两篇文章。
本篇文章将重点关注新生代的垃圾回收。
大部分JVM都会采用所谓的分代收集方式去回收垃圾,什么是分代收集呢?
根据对象的存活周期的不同将内存划分为好几块。一般是把java堆分为新生代和老年代,这样就可以根据各个年代的特点采...
分类:
其他好文 时间:
2014-06-16 18:38:23
阅读次数:
265