java垃圾回收


IntelliJ IDEA 配置 JVM参数

通过开发工具 IntelliJ IDEA 配置 JVM参数,需要打开 “Run->Edit Configurations” 菜单,然后在 VM Options 中添加相应的 JVM 参数。

示例代码准备

为了能够更好的体会,垃圾回收参数的执行效果,我们需要准备一段简易的代码,供我们执行使用,并在代码中手动执行垃圾回收操作,触发垃圾回收机制,使我们的参数能够追踪垃圾回收的动作,并打印相应的日志。

实例:准备测试代码,创建一个 String 类型的 ArrayList,并在 list 中添加三个元素,分别是 “Hello”,“World”,“!!!”。然后直接手动执行垃圾回收操作。

public class PrintGCParamsDemo {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("Hello");
        list.add("World");
        list.add("!!!");
        System.gc(); //手动执行 gc 垃圾回收
    }
}

-XX:+PrintGC 参数

参数作用:-XX:+PrintGC 参数是垃圾回收跟踪中十分常用的参数。使用这个参数启动 Java 虚拟机后,只要遇到 GC,就会打印日志。

GC 与 Full GC:代表了垃圾回收的类型

System.gc():代表了引发方式,是通过调用 gc 方法进行的垃圾回收;

-XX:+PrintGCDetails 参数

参数作用:-XX:+PrintGCDetails 参数是垃圾回收跟踪中十分常用的参数,而且日志更加详细。获取比 -XX:+PrintGC 参数更详细的 GC 信息。

PSYoungGen:代表了「年轻代」的回收

ParOldGen:「老年代」

Metaspace:「元空间」,JDK 的低版本也称之为永久代

-XX:+PrintHeapAtGC 参数

参数作用:-XX:+PrintHeapAtGC 参数是垃圾回收跟踪中,对堆空间进行跟踪时十分常用的参数,可以在每次 GC 前后分别打印堆的信息

-XX:+PrintGCTimeStamps 参数

参数作用:会在每次 GC 发生时,额外输出 GC 发生的时间,该输出时间为虚拟机启动后的时间偏移量。需要与 -XX:+PrintGC 或 -XX:+PrintGCDetails 配合使用,单独使用 -XX:+PrintGCTimeStamps 参数是没有效果的。