1.串行垃圾回收器
语句: -XX:+UserSerialGC=serial+SerialOld
serial新生代的复制算法
SerialOld老年代的标记加整理算法
单线程
堆内存较小,适合个人电脑
2.吞吐量优先
语法 | 含义 |
---|---|
-XX:+UseParallelGC~ -XX:+UserParallelOldGC | UseParallelGC是开启新生代垃圾回收,UserParallelOldGC 是开启老年代垃圾回收,新生代是复制算法,老年代是标记加整理算法,只开启一个默认另外一个也会开启 |
-XX:+UseAdaptiveSizePolicy | 采用自适应的大小调整策略,主要调整新生代的大小 |
-XX:GCTimeRatio=ratio | 1/(1+ratio)它用于控制垃圾回收时间与执行用户线程时间的比率。具体来说,它定义了当JVM花费在垃圾回收的时间占总时间的比率达到多少时,JVM将会调整垃圾回收策略以减少GC的时间。 |
-XX:MaxGCPauseMillis=ms | 默认值是200ms,表示设置GC的最大停顿时间 |
-XX:ParallelGCThreads=n | 可以控制运行时线程的数量 |
多线程
适合堆内存较大的场景,需要多核CPU支持
让单位时间内,STW的时间最短,根据牛波一公式2+2=4所得,这个吞吐量的时间讲的是总时间最短
3.响应时间优先d
语法 | 含义 |
---|---|
-XX:+UseConcMarkSweepGC~ -XX:+UseParNewGC ~ SerialOld | 基于标记+清除算法的垃圾回收器,并且他是并发的,他可以跟用户线程并发执行,前两个参数配合使用,是新老年代回收,当出现并发失败的时候使用第三个参数,使其退化到单线程 |
-XX:ParallelGCThreads=n ~ -XX:ConcGCThreads=threads | 设置STW阶段的并行worker线程数。如果逻辑处理器小于等于8个,则默认 n 等于逻辑处理器的数量。如果逻辑处理器大于8个,则 n 默认约等于处理器数量的5/8。如果是高配置的 SPARC 系统,则默认 n 大约等于逻辑处理器数量的5/16。大多数情况下使用默认值即可。 |
-XX:CMSInitiatingOccupancyFraction=percent | 控制何时进行CMS垃圾回收,设置内存占比,不用等到垃圾满了才回收,为浮动垃圾预留一定空间,可以设置80%就是说当老年代垃圾占用内存的80%时就开始回收早期默认值是65% |
-XX:+CMSScavengeBeforeRemark | 在标记之前先进行新生代垃圾回收 |
多线程
适合堆内存较大的场景,需要多核CPU支持
占用了一定的cpu吞吐量,对整个应用程序的吞吐量有一定的影响
STW(世界暂停时间)
尽可能让单次的STW时间最短 ,根据牛波二公式1+1+1+1=4所得,这个时间讲的是单次时间最短