当前位置: 首页 > article >正文

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

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


http://www.kler.cn/a/160231.html

相关文章:

  • 【C++】string类(附题)
  • 如何向函数模块 FM 中传递 Range 参数
  • 前端,location.reload刷新页面
  • 微信小程序中使用离线版阿里云矢量图标
  • 封装一个省市区的筛选组件
  • WordPress 6.7 “Rollins”发布
  • HarmonyOS学习--创建和运行Hello World
  • 基于SSM的物资物流系统
  • 什么是呼叫中心的语音通道?呼叫中心语音线路有几种?
  • [Electron] 将应用日志文件输出
  • 图解系列--Web服务器,Http首部
  • 我想涨工资,请问测试开发该怎么入门?
  • Zabbix自定义飞书webhook告警媒介2
  • vue 过滤器 (filters) ,实际开发中的使用
  • 解决 video.js ios 播放一会行一会不行
  • 【技术分享】RK356X Android11 以太网共享4G网络
  • Gti GUI添加标签
  • IPv4/IPv6 组播对应的MAC地址
  • Scala--2
  • 智能优化算法应用:基于蜜獾算法无线传感器网络(WSN)覆盖优化 - 附代码
  • 一篇文章带你详细了解C++智能指针
  • 云上守沪 | 云轴科技ZStack成功实践精选(上海)
  • 3.2 Puppet 和 Chef 的比较与应用
  • Android--Jetpack--Lifecycle详解
  • UVa1583生成元(Digit Generator)
  • Nero刻录光盘软件-极好用