垃圾搜集器UseParallelGC

查看jdk支持的垃圾收集器有哪些?
当前进程使用的垃圾收集器是什么?

查看默认设置

  • 查看默认设置命令:
java -XX:+PrintCommandLineFlags -version

# -XX:+UseParallelGC 
  • 查看默认垃圾收集器详细信息命令

通过新生代、老年代名字确定垃圾收集器

java -XX:+PrintGCDetails -version

# PSYoungGen
# ParOldGen
  • 更加准确的定位使用了哪些垃圾收集器
java -XX:+PrintFlagsFinal -version | grep 'bool Use' | grep 'GC ' | grep -v java

一探究竟

# 应用启动处上代码,直接查看
List<GarbageCollectorMXBean> beans = ManagementFactory.getGarbageCollectorMXBeans();
for (GarbageCollectorMXBean bean : beans) {
	System.out.println(bean.getName());
}

结果不尽人意

  • 使用参数-XX:+UseParallelGC
# 结果
PS Scavenge
PS MarkSweep
  • 使用参数-XX:+UseParallelOldGC
# 结果
PS Scavenge
PS MarkSweep
  • 使用参数 -XX:+UseParallelGC -XX:+UseParallelOldGC
# 结果

PS Scavenge
PS MarkSweep

搜寻官方资料得知,UseParallelGC和UseParallelOldGC,在jdk8及之后,开启一个默认启用另一个

新生代: Parallel Scavenge 复制算法
老年代: Parallel Old 标记清除算法


转而尝试G1

  • 使用参数 -XX:+UseG1GC
# 结果
G1 Young Generation
G1 Old Generation

主要参数

-XX:MaxGCPauseMillis:设置期望达到的最大GC停顿时间指标,默认值是 200 毫秒。

-XX:G1HeapRegionSize=n:设置的 G1 区域的大小。值是 2 的幂,范围是 1 MB 到 32 MB 之间。目标是根据最小的 Java 堆大小划分出约 2048 个区域。默认是堆内存的1/2000

-XX:ParallelGCThreads=n:设置 STW 工作线程数的值。将 n 的值设置为逻辑处理器的数量。n 的值与逻辑处理器的数量相同,最多为 8。

-XX:ConcGCThreads=n:设置并行标记的线程数。将 n 设置为并行垃圾回收线程数 (ParallelGCThreads)的 1/4 左右。

-XX:InitiatingHeapOccupancyPercent=n:设置触发并发标记周期的 Java 堆占用率阈值。默认值是45,表示占用率是整个 Java 堆的 45%时,将会触发并发标记周期。

参考资料

  • https://www.zhihu.com/question/56344485/answer/149543993
  • https://betheme.net/yidongkaifa/97000.html

你可能感兴趣的:(Java,java)