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

在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() 可能并不会立即执行垃圾回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着猪猪去旅行A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值