显式 GC 的使用:留与去,如何选择?

目录

一、什么是显式 GC?

(一) 垃圾回收的基本原理

(二)显式 GC 方法和行为

1. System.gc() 方法

2. 显式 GC 的行为

(三)显式 GC 的使用场景与风险

1. JVM 如何处理显式 GC

2. 显式 GC 的风险

二、显式 GC 对性能的影响

(一) 全 GC 与 STW

1. Full GC 是如何发生的?

2. STW(Stop-the-World)现象

3. Full GC 的性能开销

(二) 对 DirectByteBuffer 的影响

1. DirectByteBuffer 的垃圾回收问题

2. 显式 GC 的作用:避免内存泄漏

3. 禁用显式 GC 带来的问题

4. 解决方案:显式 GC 与优化参数

三、显式 GC 的争议

(一) 保留 System.gc():避免内存泄漏

1. DirectByteBuffer 和堆外内存的清理

2. 在长期运行的系统中避免资源泄漏

(二) 禁用 System.gc():减少性能损耗

1. 避免频繁的 Full GC 导致的 STW(Stop-the-World)停顿

2. 对 JVM 自适应回收策略的干扰

(三) 额外的 JVM 参数:优化显式 GC 的行为

1. -XX:+ExplicitGCInvokesConcurrent

2. -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

3. -XX:+UseConcMarkSweepGC 或 -XX:+UseG1GC

四、如何选择:留还是去?

(一) 保留显式 GC 的适用场景

 1. 堆外内存管理需求

2. 需 要频繁类卸载的应用

 3. 长时间运行的服务

(二)禁用显式 GC 的适用场景

1. 高并发、 低延迟要求

2. 现 代垃圾回收器的优化

 3. 避免干扰自适应回收机制

(三) 如何优化显式 GC 以减少性能影响

 1. 启用并发回收

 2. 启用类卸载功能

 3. 使用适合的垃圾回收器

五、小结


干货分享,感谢您的阅读!

在 Java 中,System.gc() 是一种显式触发垃圾回收的方式。然而,是否应该在代码中显式调用它,却是一个有争议的话题。有些开发者建议禁用显式 GC,因为它会导致不必要的性能开销,而另一些开发者则认为它在特定场景下是必要的。本文将分析显式 GC 的影响,并给出推荐的实践策略。

 历史主要基本文章回顾:

涉猎内容 具体链接
Java GC 基础知识快速回顾
评论 409
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张彦峰ZYF

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

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

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

打赏作者

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

抵扣说明:

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

余额充值