1.查看使用的何种垃圾收集器
方法一
powershell
D:\app\Java\jdk11\bin>java -XX:+PrintCommandLineFlags -version
-XX:G1ConcRefinementThreads=13 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=257905728 -XX:MaxHeapSize=4126491648 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation
java version "11" 2018-09-25
Java(TM) SE Runtime Environment 18.9 (build 11+28)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11+28, mixed mode)
方法二
powershell
D:\app\Java\jdk11\bin>java -XX:+PrintFlagsFinal -version
[Global flags]
bool UseG1GC = true {product} {ergonomic}
java version "11" 2018-09-25
Java(TM) SE Runtime Environment 18.9 (build 11+28)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11+28, mixed mode)
方法三
java
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.util.List;
public class x {
public static void main(String args[]) {
List<GarbageCollectorMXBean> l = ManagementFactory.getGarbageCollectorMXBeans();
for(GarbageCollectorMXBean b : l) {
System.out.println(b.getName());
}
}
}
方法四:Java进程正在运行的情况下
powershell
D:\app\Java\jdk1.8.0_162\bin>jps
11408 TestJmap
33076 Eclipse
27324 Jps
D:\app\Java\jdk1.8.0_162\bin>jmap -heap 11408
Attaching to process ID 11408, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.162-b12
using thread-local object allocation.
Parallel GC with 13 thread(s)
2.-XX:UseParallelGC解释
引用《深入理解Java虚拟机:JVM高级特性与最佳实践》的介绍:
[外链图片转存中…(img-ZipNNmVc-1651912767170)]
lajishoujixiangguancanshu
表示使用的垃圾收集器是:新生代(Parallel Scavenge),老年代(Ps MarkSweep)组合。
jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)
jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)
jdk1.9 默认垃圾收集器G1
3.JVM中的垃圾收集器
[外链图片转存中…(img-UTu4U4js-1651912767171)]
gcollector
图中展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,则说明它们可以搭配使用。虚拟机所处的区域则表示它是属于新生代还是老年代收集器。
新生代