面试官问:如何手动触发垃圾回收?幸好昨天复习到了

在Java中,手动触发垃圾回收可以使用 System.gc() 方法。但需要注意,调用 System.gc() 并不能确保立即执行垃圾回收,因为具体的垃圾回收行为是由Java虚拟机决定的,而不受程序员直接控制。

public class GarbageCollectionExample {
    public static void main(String[] args) {
        // 创建一些对象
        Object obj1 = new Object();
        Object obj2 = new Object();

        // 打印初始时内存情况
        printMemoryStatus("Before Garbage Collection");

        // 手动触发垃圾回收
        System.gc();

        // 打印触发垃圾回收后的内存情况
        printMemoryStatus("After Garbage Collection");

        // 其他业务逻辑
    }

    private static void printMemoryStatus(String message) {
        Runtime runtime = Runtime.getRuntime();
        long freeMemory = runtime.freeMemory();
        long totalMemory = runtime.totalMemory();
        long maxMemory = runtime.maxMemory();

        System.out.println(message + ":");
        System.out.println("Free Memory: " + freeMemory + " bytes");
        System.out.println("Total Memory: " + totalMemory + " bytes");
        System.out.println("Max Memory: " + maxMemory + " bytes");
        System.out.println("------------------------");
    }
}

在上面的代码中,通过 printMemoryStatus 方法打印了内存状态,包括空闲内存、总内存和最大内存。在手动触发垃圾回收之前和之后,都打印了内存状态。

运行一下上面的代码,会得到以下的结果:

Before Garbage Collection:
Free Memory: 6958680 bytes
Total Memory: 8336096 bytes
Max Memory: 12573056 bytes
------------------------
After Garbage Collection:
Free Memory: 7446808 bytes
Total Memory: 8336096 bytes
Max Memory: 12573056 bytes
------------------------

需要注意的是,垃圾回收的触发和执行是由Java虚拟机决定的,因此实际的结果可能会有所不同。在正常情况下,Java虚拟机会根据内存状况和程序运行状态自动执行垃圾回收,无需手动触发。手动调用 System.gc() 可能并不会立即执行垃圾回收。

猜你喜欢

转载自blog.csdn.net/weixin_43728884/article/details/134843213