查看JVM使用的垃圾收集器/设置垃圾收集器JVM参数

一、设置垃圾收集器参数

-XX:+UseSerialGC,虚拟机运行在Client模式下的默认值,Serial+Serial Old

-XX:+UseParNewGCParNew+Serial OldJDK1.8被废弃,在JDK1.7还可以使用。

-XX:+UseConcMarkSweepGCParNew+CMS+Serial Old

-XX:+UseParallelGC,虚拟机运行在Server模式下的默认值,Parallel Scavenge+Serial Old(PS Mark Sweep)

-XX:+UseParallelOldGCParallel Scavenge+Parallel Old

-XX:+UseG1GCG1+G1

二、测试代码:

	public static void main(String[] args) {
		
		/* -XX:+UseParallelOldGC和-XX:+UseParallelGC结果一样,因为MXBean名字一样,但是实际使用的不一样 */
		List<GarbageCollectorMXBean> beans = ManagementFactory.getGarbageCollectorMXBeans();
		for (GarbageCollectorMXBean bean : beans) {
			System.out.println(bean.getName());
		}
	}

三、测试环境:

JDK1.8.0_144,Java HotSpot(TM) 64-Bit Server VM,

默认参数:-XX:+PrintGCDetails  -XX:+PrintCommandLineFlags

打印内存信息,打印JVM参数

四、测试结果:

1、指定-XX:+UseSerialGC

-XX:InitialHeapSize=65006144 -XX:MaxHeapSize=1040098304 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseSerialGC 
Copy
MarkSweepCompact
Heap
 def new generation   total 19008K, used 1690K [0x00000000c2000000, 0x00000000c34a0000, 0x00000000d6aa0000)
  eden space 16896K,  10% used [0x00000000c2000000, 0x00000000c21a6838, 0x00000000c3080000)
  from space 2112K,   0% used [0x00000000c3080000, 0x00000000c3080000, 0x00000000c3290000)
  to   space 2112K,   0% used [0x00000000c3290000, 0x00000000c3290000, 0x00000000c34a0000)
 tenured generation   total 42368K, used 0K [0x00000000d6aa0000, 0x00000000d9400000, 0x0000000100000000)
   the space 42368K,   0% used [0x00000000d6aa0000, 0x00000000d6aa0000, 0x00000000d6aa0200, 0x00000000d9400000)
 Metaspace       used 2863K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 311K, capacity 386K, committed 512K, reserved 1048576K

2、指定-XX:+UseParNewGC

-XX:InitialHeapSize=65006144 -XX:MaxHeapSize=1040098304 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParNewGC 
ParNew
MarkSweepCompact
Heap
 par new generation   total 19008K, used 1690K [0x00000000c2000000, 0x00000000c34a0000, 0x00000000d6aa0000)
  eden space 16896K,  10% used [0x00000000c2000000, 0x00000000c21a6838, 0x00000000c3080000)
  from space 2112K,   0% used [0x00000000c3080000, 0x00000000c3080000, 0x00000000c3290000)
  to   space 2112K,   0% used [0x00000000c3290000, 0x00000000c3290000, 0x00000000c34a0000)
 tenured generation   total 42368K, used 0K [0x00000000d6aa0000, 0x00000000d9400000, 0x0000000100000000)
   the space 42368K,   0% used [0x00000000d6aa0000, 0x00000000d6aa0000, 0x00000000d6aa0200, 0x00000000d9400000)
 Metaspace       used 2864K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 311K, capacity 386K, committed 512K, reserved 1048576K
Java HotSpot(TM) 64-Bit Server VM warning: Using the ParNew young collector with the Serial old collector is deprecated and will likely be removed in a future release

3、指定-XX:+UseConcMarkSweepGC

-XX:InitialHeapSize=65006144 -XX:MaxHeapSize=1040098304 -XX:MaxNewSize=346030080 -XX:MaxTenuringThreshold=6 -XX:OldPLABSize=16 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:-UseLargePagesIndividualAllocation -XX:+UseParNewGC 
ParNew
ConcurrentMarkSweep
Heap
 par new generation   total 19008K, used 1690K [0x00000000c2000000, 0x00000000c34a0000, 0x00000000d6a00000)
  eden space 16896K,  10% used [0x00000000c2000000, 0x00000000c21a6848, 0x00000000c3080000)
  from space 2112K,   0% used [0x00000000c3080000, 0x00000000c3080000, 0x00000000c3290000)
  to   space 2112K,   0% used [0x00000000c3290000, 0x00000000c3290000, 0x00000000c34a0000)
 concurrent mark-sweep generation total 42368K, used 0K [0x00000000d6a00000, 0x00000000d9360000, 0x0000000100000000)
 Metaspace       used 2863K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 311K, capacity 386K, committed 512K, reserved 1048576K

4、指定-XX:+UseParallelGC

-XX:InitialHeapSize=65006144 -XX:MaxHeapSize=1040098304 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
PS Scavenge
PS MarkSweep
Heap
 PSYoungGen      total 18432K, used 1588K [0x00000000eb580000, 0x00000000eca00000, 0x0000000100000000)
  eden space 15872K, 10% used [0x00000000eb580000,0x00000000eb70d058,0x00000000ec500000)
  from space 2560K, 0% used [0x00000000ec780000,0x00000000ec780000,0x00000000eca00000)
  to   space 2560K, 0% used [0x00000000ec500000,0x00000000ec500000,0x00000000ec780000)
 ParOldGen       total 42496K, used 0K [0x00000000c2000000, 0x00000000c4980000, 0x00000000eb580000)
  object space 42496K, 0% used [0x00000000c2000000,0x00000000c2000000,0x00000000c4980000)
 Metaspace       used 2863K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 311K, capacity 386K, committed 512K, reserved 1048576K

5、指定-XX:+UseParallelOldGC

-XX:InitialHeapSize=65006144 -XX:MaxHeapSize=1040098304 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelOldGC 
PS Scavenge
PS MarkSweep
Heap
 PSYoungGen      total 18432K, used 1588K [0x00000000eb580000, 0x00000000eca00000, 0x0000000100000000)
  eden space 15872K, 10% used [0x00000000eb580000,0x00000000eb70d058,0x00000000ec500000)
  from space 2560K, 0% used [0x00000000ec780000,0x00000000ec780000,0x00000000eca00000)
  to   space 2560K, 0% used [0x00000000ec500000,0x00000000ec500000,0x00000000ec780000)
 ParOldGen       total 42496K, used 0K [0x00000000c2000000, 0x00000000c4980000, 0x00000000eb580000)
  object space 42496K, 0% used [0x00000000c2000000,0x00000000c2000000,0x00000000c4980000)
 Metaspace       used 2863K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 311K, capacity 386K, committed 512K, reserved 1048576K

6、指定-XX:+UseG1GC

-XX:InitialHeapSize=65006144 -XX:MaxHeapSize=1040098304 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation 
G1 Young Generation
G1 Old Generation
Heap
 garbage-first heap   total 63488K, used 1024K [0x00000000c2000000, 0x00000000c21001f0, 0x0000000100000000)
  region size 1024K, 2 young (2048K), 0 survivors (0K)
 Metaspace       used 2864K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 311K, capacity 386K, committed 512K, reserved 1048576K

五、使用jconsole查看

测试代码:

	public static void main(String[] args) {
		
		try {
			Thread.sleep(1000 * 1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

测试环境:Java HotSpot(TM) 64-Bit Server VM 

-XX:+UseParallelOldGC

1、点击JDK/bin/jconsole,弹出JConsole客户端,选中本地进程,双击要监控的进程。


2、切换到VM概要,查看垃圾收集器,注意顺序是反的,上面的是老年代收集器,下面的是新生代收集器。

 


3、切换MBean标签,查看java.lang.GarbageCollector内容。注:从这些内容也无法分辨老年代是否是Parallel Old,和设置-XX:+UseParallelGC信息一样。

 

五、总结:

1、-XX:+UseParallelGC和-XX:+UseParallelOldGC除了JVM参数不同,打印结果都一样,看解释是因为设置了名字相同的MXBean,其内部的实现是不同的。

2、Serial的MXBean名称为Copy,新生代池名称为def new generation。

ParNew:ParNew、par new generation。

Parallel Scavenge:PS Scavenge、PSYoungGen。

Serial Old:MarkSweepCompact、tenured generation 。

Serial Old(PS Mark Sweep)PS MarkSweep、ParOldGen。

Parallel OldPS MarkSweep、ParOldGen。

G1(不准确):G1 Young Generation、garbage-first heap 

       G1 Old Generation 、无。 

猜你喜欢

转载自blog.csdn.net/shi2huang/article/details/80085193