08、System.gc()

1、核心作用

  1. 建议而非强制
    • 调用 System.gc() 仅向 JVM 发送一个垃圾回收的“建议”,但 JVM 不保证立即执行
    • 最终,是否触发 GC、何时触发、使用哪种垃圾回收器(如:Serial GC、G1 GC 等)。
      • 由 JVM 自行决定
  2. 底层实现
    • System.gc() 实际调用的是 Runtime.getRuntime().gc(),二者功能等价。

2、使用场景(谨慎使用)

  1. 性能测试与调试
    • 在内存敏感的性能测试中,手动触发 GC 以观察内存释放效果
      • 注意:需结合 -XX:+DisableExplicitGC 禁用自动 GC。
  2. 特殊资源释放
    • 某些 Native 资源(如:堆外内存)可能依赖 GC 触发回收。
      • 如:DirectByteBuffer 的清理。
    • 此时,可尝试调用 System.gc()。

3、潜在问题

  1. 性能风险
    • 垃圾回收可能导致 Stop-The-World(STW) 暂停。
      • 尤其在 Full GC 时,应用线程会被挂起,影响响应时间
    • 频繁调用会干扰 JVM 的自动优化策略(如分代收集、动态调整 GC 频率)。
  2. 不可移植性
    • 不同 JVM 实现(如 HotSpot、OpenJ9)对 System.gc() 的响应策略不同。
    • 因此,代码行为可能不一致。
  3. 生产环境慎用
    • 生产环境中通常禁用显式 GC(通过 JVM 参数 -XX:+DisableExplicitGC)。
    • 避免人为引发性能波动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值