java认知描述_Java技术:JVM的初步认识( 六 )


吞吐量越高,那么响应速度越快,在与用户的交互中就会感觉更顺畅,这在注重交互的环境中更为重要 。
我们通过-XX:+来选择使用它,然后使用-XX:参数设置最大GC暂停时间(毫秒数),然后GC会尽量在这个时间内完成 。但并不是越小越好,越小那么每次回收的内存也就越少,那么回收的次数也会增长起来,总体的吞吐量也会降低 。同样我们也可以使用-XX:设置非GC占用时间的比重 。比如设置为19,那非GC占用时间的比重就是19/(1+19).
除去上述两个配置参数外,我们还可以使用-XX:+y命令,这个命令添加后,就不需要手动去指定新生代大小,以及Eden区和区的比例,晋升老年代的年龄阈值了,JVM会根据当前系统的运行情况智能调节这些大小比例等 。
5.3. Old
看名字应该能够猜得出来,这就是收集器的老年代版本,它同样也是模式下默认的垃圾回收器,但它在模式下有一个另外的用途,作为CMS收集器的后备预案 。这个不用手动开启,一般在指定收集器的时候就自动搭配了 Old收集器 。
5.3. Old
这个是 收集器的老年代版本,专门用于与 搭配使用 。不用手动开启,在我们开启 收集器的时候自动使用 。
5.3.6CMS
-Mark-Sweep收集器,它是并发收集,低停顿的 。它的目标就是尽量减少停顿时间,我们通过-XX:+开启CMS收集器,打开后就会使用+CMS+ Old组合,而 Old是作为CMS回收失败时的后备GC 。
5.3.7G1
G1是现目前最前沿的技术,它跟上面所说的那些收集器完全不同 。我们现在只需要知道它的目标也是低停顿,与CMS目标一致,但CMS更为成熟,G1却潜力更大,可能在Java9作为默认的垃圾收集器 。
我们可以通过-XX:+来指定使用G1收集器 。
后记:
在最新的Java 11中,已经提供了ZGC这种新型的垃圾回收器了,相比G1不再像其他垃圾回收器一样将新生代,老年代分为固定内存区域,而是分成了很多个,每个可以是新生代或者老年代 。它更加灵活,在大堆的情况下能够显著改善内存回收的停顿时间 。
【java认知描述_Java技术:JVM的初步认识】而ZGC更是逆天,无论堆内存大小是多大,最高的JVM停顿不超过10ms,而测试中,128G的堆内存,最大停顿才1.68ms,是最大 。这样一来基本就可以告别上文所说的一切调优了,但无论如何,静下心来学习始终是一件有着重要意义的事情(并不是可惜我啃了这么久的书后面发现可能再也用不上了),对于ZGC有兴趣的同学可以自己去看看,Java 11是一个值得期待的版本 。