并行收集器

默认情况下服务器上选择并行收集器。
 
1、并行收集器(这里也称为吞吐量收集器)是类似于串行收集器的分代收集器; 主要区别在于多个线程用于加速垃圾收集。使用命令行选项启用并行收集器-XX:+UseParallelGC。
 
2、可以使用命令行选项控制垃圾收集器线程的数量 -XX:ParallelGCThreads=12
 
3、对于并行收集器,Java SE提供了垃圾收集调整参数,满足的顺序为从高到低:最大暂停时间>吞吐量>最小堆空间
最大暂停时间目标:
-XX:MaxGCPauseMillis=500
暂停时间是垃圾收集器停止应用程序并恢复不再使用的空间的持续时间。
最大暂停时间是限制暂停的最长时间。
垃圾收集器将调整Java堆大小以及与垃圾收集相关的其他参数,以尝试使垃圾收集暂停时间短于MaxGCPauseMilli配置的毫秒。这些调整可能会导致垃圾收集器更频繁地发生,从而降低了应用程序的整体吞吐量
应用程序吞吐量目标:
-XX:GCTimeRatio=5
吞吐量目标是根据垃圾回收所花费的时间和垃圾收集之外所花费的时间(称为应用程序时间)来衡量的。例如:GC时间为1,非GC时间为19,这吞吐量=1/(1+19)=5%,设置GCTimeRatio=5。
堆占用空间:
-Xmx
 
4、堆调整
调整堆是按照每次20%增长,按照每次5%收缩
可以通过选择进行配置:
young区增长量:-XX:YoungGenerationSizeIncrement=<Y>
old区增长量:-XX:TenuredGenerationSizeIncrement=<T>
收缩量:X/D,-XX:AdaptiveSizeDecrementScaleFactor=<D>
5、服务器JVM默认初始和最大堆大小
32位JVM上,如果有4 GB或更多物理内存,则默认最大堆大小最多可达1 GB
64位JVM上,如果存在128 GB或更多物理内存,则默认最大堆大小最多可为32 GB
 
6、指定初始和最大堆大小
使用-Xms设置初始化大小、-Xmx设置最大堆
如果明确知道应用程序需要的堆大小,可以-Xms与-Xmx设置相同值
如果不知道,可以设置-Xms初始化堆大小,然后JVM自己控制堆大小以达到堆使用和性能之前的平衡。
 
GC时间为young区GC+old区GC时间之和。
如果吞吐量和最大暂停时间已经满了,那么垃圾回收器将减少堆得大小直到不能满足两个目标中的一个为止。
如果不确定应用程序需要堆的最大值,就不用设置最大堆值,从而满足应用的最大吞吐量目标。
JVM将控制堆的大小以满足吞吐量目标。
当垃圾回收期试图满足吞吐量和最大暂停时间两个目标时,堆的大小可能频繁变动。
 
 
收藏文章数量从多到少与“把书读薄”是一个道理
原文地址:https://www.cnblogs.com/use-D/p/9567229.html