如何通过代码优化减少垃圾回收的频次

云晨大大_6553

云晨大大_6553

2026-07-11

654人浏览

原创

jvm gc优化核心是减少对象创建与延长存活期:复用对象(如threadlocal、静态常量)、避免字符串拼接、及时清理集合引用、慎用static持有、优先基本类型、善用弱引用与对象池。

如何通过代码优化减少垃圾回收的频次

核心思路很直接:让 JVM 少“干活”——不是靠调参数强行压 GC,而是从源头减少它要回收的东西。频繁 GC 本质是代码在短时间内制造了大量短命对象,堆空间被快速填满,触发回收。优化重点就是控制对象的“出生率”和“存活期”。

复用对象,别总 new

循环里、高频方法中反复创建 StringBuilder、ArrayList、DateFormatter、临时字符串等,是最常见的“GC 加速器”。这些对象一用完就变成垃圾,Eden 区很快撑爆。

  • 用 ThreadLocal 管理线程内可复用对象,比如 StringBuilder 或 JSON 解析器实例
  • 把方法内创建的对象提到类成员或静态常量(前提是线程安全或无状态)
  • 避免字符串拼接写成 "a" + "b" + obj.toString(),改用 StringBuilder 或 String.format(内部也复用)

管好对象生命周期

对象不该活的时候还挂着引用,就会拖慢回收节奏,甚至被错误晋升到老年代,引发更重的 Full GC。

Zeemo AI
Zeemo AI

Zeemo AI是一款用于自动生成、编辑和翻译视频字幕的 AI 视频字幕工具。

下载
  • 集合类使用完及时 clear(),而不是等着被 GC;尤其注意缓存、监听器、回调注册表这类长生命周期容器
  • 不用的对象显式赋 null(对大对象或长生命周期引用有效,比如 Activity 中的 Bitmap、大型 List)
  • 慎用 static 持有 Activity、Context、View 等,容易造成内存泄漏,让一堆本该回收的对象卡在老年代

用对数据结构和类型

有些写法看着简洁,背后却悄悄生成一堆中间对象。

  • 基本类型优先用 int/long/double,少用 Integer/Long/Double;自动装箱拆箱会在堆上创建包装类对象
  • 遍历集合时用增强 for 或 Iterator,避免通过 get(i) 频繁访问 ArrayList —— 虽然不直接产垃圾,但配合不当容易诱发冗余对象(如每次取值都 new 一个 DTO)
  • 大数组或大对象尽量延迟初始化,或考虑分块处理,避免一次性占满 Eden 区导致 Minor GC 提前触发

善用弱引用与对象池

对必须频繁创建又需一定状态的对象(如网络连接、解析器、图形上下文),靠手动复用太难管,得靠机制兜底。

  • 缓存场景下,用 WeakReference 或 SoftReference 包裹 value,让 GC 在内存紧张时能主动清理
  • 高并发、固定模式的对象(如日志事件、消息体),可用轻量级对象池(如 Apache Commons Pool 或自定义 Stack 池),get → use → return,避免重复构造
  • 注意:对象池不是万能药,池大小不合理反而增加管理开销,优先用于构造成本高、复用率高的对象

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10017

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7162

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6292

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1084

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

908

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1316

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2629

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19951

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1175

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习