单线程的收集器,但它 的“单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作, 更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。Stop The World”
ParNew收集器其实就是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集之 外,其余行为包括Serial收集器可用的所有控制参数(例如:-XX:SurvivorRatio、-XX: PretenureSizeThreshold、-XX:HandlePromotionFailure等)、收集算法、Stop The World、对 象分配规则、回收策略等都与Serial收集器完全一样,在实现上,这两种收集器也共用了相 当多的代码。
Parallel Scavenge收集器是一个新生代收集器,它也是使用复制算法的收集器,又是并行 的多线程收集器 Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点 是尽可能地缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标则是达到 一个可控制的吞吐量(Throughput)。所谓吞吐量就是CPU用于运行用户代码的时间与CPU总 消耗时间的比值,即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间),虚 拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。
Serial Old是Serial收集器的老年代版本,它同样是一个单线程收集器,使用“标记-整 理”算法。这个收集器的主要意义也是在于给Client模式下的虚拟机使用。如果在Server模式 下,那么它主要还有两大用途:一种用途是在JDK 1.5以及之前的版本中与Parallel Scavenge 收集器搭配使用[1],另一种用途就是作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用。
Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。 这个收集器是在JDK 1.6中才开始提供的,在此之前,新生代的Parallel Scavenge收集器一直 处于比较尴尬的状态。原因是,如果新生代选择了Parallel Scavenge收集器,老年代除了 Serial Old(PS MarkSweep)收集器外别无选择(还记得上面说过Parallel Scavenge收集器无 法与CMS收集器配合工作吗?)。由于老年代Serial Old收集器在服务端应用性能上的“拖 累”,使用了Parallel Scavenge收集器也未必能在整体应用上获得吞吐量最大化的效果,由于 单线程的老年代收集中无法充分利用服务器多CPU的处理能力,在老年代很大而且硬件比较 高级的环境中,这种组合的吞吐量甚至还不一定有ParNew加CMS的组合“给力”。 直到Parallel Old收集器出现后,“吞吐量优先”收集器终于有了比较名副其实的应用组 合,在注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old 收集器
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集 器。目前很大一部分的Java应用集中在互联网站或者B/S系统的服务端上,这类应用尤其重 视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。CMS收集器就非常 符合这类应用的需求。 从名字(包含“Mark Sweep”)上就可以看出,CMS收集器是基于“标记—清除”算法实现。
其中,初始标记、重新标记这两个步骤仍然需要“Stop The World”。初始标记仅仅只是 标记一下GC Roots能直接关联到的对象,速度很快,并发标记阶段就是进行GC RootsTracing 的过程,而重新标记阶段则是为了修正并发标记期间因用户程序继续运作而导致标记产生变 动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远 比并发标记的时间短。 由于整个过程中耗时最长的并发标记和并发清除过程收集器线程都可以与用户线程一起 工作,所以,从总体上来说,CMS收集器的内存回收过程是与用户线程一起并发执行的。 CMS是一款优秀的收集器,它的主要优点在名字上已经体现出来了:并发收集、低停 顿,Sun公司的一些官方文档中也称之为并发低停顿收集器(Concurrent Low Pause Collector)。但是CMS还远达不到完美的程度,它有以下3个明显的缺点:
特点如下
-XX:+PrintGCDetails
JDK的bin目录中命令行工具,这些命令行工具大多数是jdk/lib/tools.jar类库的一层薄包装而已,它们主要的功能代码是 在tools类库中实现
JVM Process Status Tool,显示指定系统内所有的HotSpot 虚拟机进程
JVM Statistices Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据
Configuration Info for Java ,显示虚拟机配置信息
Memory Map for Java , 生成虚拟机的内存转出快照(heapdump文件)
JVM Heap Dump Brower,用户分析headdump文件,它会建立一个HTTP/HTML服务器,让用户可以再浏览器上查看分析结果
Stack Trace for java,显示虚拟机的线程快照
原文:https://www.cnblogs.com/javarice/p/11815164.html