JAVA 年轻代收集器  第九节

继续上一章所讲的,STW即GC时候的停顿时间,他会暂停我们程序中的所有线程。如果STW所用的时间长而且次数多的话,那么我们整个系统稳定性以及可用性将大大降低。

因此我们在必要的时候需要对虚拟机进行调优,那么调优的主要目标之一就是降低STW的时间,也就是减少Full GC的次数。那么这里我们从调优的角度来分析各个收集器的优势与不足。

首先从作用于年轻代的收集器开始(采用复制的收集算法):

Serial收集器:一个单线程收集器,在进行回收的时候,必须暂停其他所有的工作线程,直到收集结束。缺点:因为要完全暂停线程,所以用户体验不佳。但是由于新生代回收得较快,所以停顿的时间非常少,而且没有线程切换的开销,因此也简单高效。通过 -XX:+UseSerialGC参数启用。

ParNew收集器:这个是Serial收集器的多线程版本,适用于多核CPU的设备。但对于单核的设备来说,需要进行线程之间的切换,效率反而没有单线程的高。通过-XX:ParallelGCThreads参数限制收集的线程数,-XX:+UseParNewGC参数启用。

Parallel Scavenge收集器:该收集器是我们文章中的所有例子的默认年轻代收集器。他的关注点和其他的收集器不同,其他的关注点是尽可能的缩短Full GC的时间。而该收集器关注的是一个可控的吞吐量。吞吐量=运行代码的时间/(运行代码的时间+GC的时间),通过参数-XX:MaxGCPauseMillis设置最大GC的停顿时间和-XX:GCTimeRatio 设置吞吐量的大小。-XX:+UseParallelGC参数启用。主要适合在后台运算而不需要太多交互的任务。

可以通过-XX:+UseAdaptiveSizePolicy参数开启自适应调节策略,这样可以免去我们自己设置堆内存的一些细节参数,比如新生代内存大小,Eden与Survivor之间的比例等等。这个参数适合对内存手工优化存在困难的时候使用,他能监控系统当前的状态,动态的调整以达到最大的吞吐量。

这里我们只大概了解了下年轻代的收集器,下面一张图给大家总结一下:

不过大家不要认为如果把这个参数设置的(MaxGCPauseMills)设置的稍小一点就能是垃圾回收集速度变得更快,GC停顿的等待时间是以牺牲吞吐量

和新生代空间来换取的:系统把新生代调小一些,手机300MB新生代肯定要比手机500MB快把,这也是直接导致垃圾收集发生的更频繁一些,

原来10秒收集一次、每次停顿100毫秒,现在变成5秒收集一次、每次停顿70毫秒。停顿时间的确在下降,但吞吐量也下降了。

—XX:UseAdaptiveSizePolicy  开关打开后 ,就不需要手动设置新生代大小,Eden和Survior区比例  和晋升老生代对象大小(参见深入理解JAVA虚拟机第79页)

JAVA 年轻代收集器 第九节的更多相关文章

  1. JAVA 年老代收集器 第10节

    JAVA 年老代收集器 第10节 上一章我们讲了新生代的收集器,那么这一章我们要讲的就是关于老年代的一些收集器.老年代的存活的一般是大对象以及生命很顽强的对象,因此新生代的复制算法很明显不能适应该区域 ...

  2. JVM(9)之 年轻代收集器

    开发十年,就只剩下这套架构体系了! >>>   继续上一篇博文所讲的,STW即GC时候的停顿时间,他会暂停我们程序中的所有线程.如果STW所用的时间长而且次数多的话,那么我们整个系统 ...

  3. JVM(10)之 年老代收集器

    开发十年,就只剩下这套架构体系了! >>>   在上一篇博文我们介绍了JAVA新生代收集器,本篇博文我们要讲的就是关于老年代的一些收集器.老年代存活的一般是大对象以及生命很顽强的对象 ...

  4. JAVA分代收集机制详解

    Java堆中是JVM管理的最大一块内存空间.主要存放对象实例. 在JAVA中堆被分为两块区域:新生代(young).老年代(old). 堆大小=新生代+老年代:(新生代占堆空间的1/3.老年代占堆空间 ...

  5. 学习JVM--垃圾回收(二)GC收集器

    1. 前言 在上一篇文章中,介绍了JVM中垃圾回收的原理和算法.介绍了通过引用计数和对象可达性分析的算法来筛选出已经没有使用的对象,然后介绍了垃圾收集器中使用的三种收集算法:标记-清除.标记-整理.标 ...

  6. 学习JVM-GC收集器

    1. 前言 在上一篇文章中,介绍了JVM中垃圾回收的原理和算法.介绍了通过引用计数和对象可达性分析的算法来筛选出已经没有使用的对象,然后介绍了垃圾收集器中使用的三种收集算法:标记-清除.标记-整理.标 ...

  7. JVM GC系列 — GC收集器

    一.前言 前文学习了各种GC回收算法,掌握了GC回收的原理,但是真正的GC实现却尤为复杂,本篇文章将主要介绍各种GC收集器. 目前主流的HotSpot VM支持多种虚拟机,这些虚拟机也体现了GC的发展 ...

  8. java面试-G1垃圾收集器

    一.以前收集器的特点 年轻代和老年代是各自独立且连续的内存块 年轻代收集器使用 eden + S0 + S1 进行复制算法 老年代收集必须扫描整个老年代区域 都是以尽可能的少而快速地执行 GC 为设计 ...

  9. Java GC收集器配置说明

    根据Java GC收集器具体分类,我们可以看出JVM根据需求不同提供了三种选择:串行收集器.并行收集器.并发收集器. 串行收集器只适用于小数据量的情况,我们主要了解一下并行收集器和并发收集器.默认情况 ...

随机推荐

  1. BZOJ 1833 ZJOI2010 count 数字计数 数位DP

    题目大意:求[a,b]间全部的整数中0~9每一个数字出现了几次 令f[i]为i位数(算前导零)中每一个数出现的次数(一定是同样的,所以仅仅记录一个即可了) 有f[i]=f[i-1]*10+10^(i- ...

  2. android分割线

    http://blog.csdn.net/dekunchenivan/article/details/6640804 在Android布局文件layout中设置水平分割线: <View      ...

  3. opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()

    能找到最好的解释来自:http://www.gamedev.net/topic/489879-glpushmatrixglpopmatrix--glloadmatrixf/ 原理: glPushMat ...

  4. css3文本效果

    CSS3 包含多个新的文本特性. 在本章中,您将学到如下文本属性: 1. text-shadow 2. word-wrap 浏览器支持 Internet Explorer 10.Firefox.Chr ...

  5. WCF Test Client

    WCF测试客户端(WCF Test Client)是一个用来测试WCF服务程序的调试工具,能够使开发WCF服务更加方便. 在Visual Studio之外打开WCF测试客户端有两种方法:第一种方法是到 ...

  6. JQuery Ajax Options

    参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 ...

  7. java 类访问权限

    Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符. private: Java语言中对访问权限限制的最窄的修饰符,一般 ...

  8. 也谈js函数节流

    1.什么是js函数节流 其本质就是不让某些代码(函数)在没有间断的情况下连续重复执行,目的就是让执行函数的请求停止了一段时间后才执行. 2.函数节流运用的场景 窗口大小的改变(resize事件),滚动 ...

  9. js关闭当前页面/关闭当前窗口/移动端 代码

    var userAgent = navigator.userAgent; if (userAgent.indexOf("Firefox") != -1 || userAgent.i ...

  10. Struts2的Stack Context和ValueStack

    1.提到Struts2的传值功能时,经常会见到Stack Context和ValueStack等概念,那么它们到底是什么,有什么作用呢. ValueStack(值栈):Struts2将OGNL上下文设 ...