【JVM】避免java内存泄漏、溢出的几种方法

1.尽早释放无用对象的引用。

好的办法是使用临时变量的时候,让引用变量在退出活动域后自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露。

2. 程序进行字符串处理时,尽量避免使用String,应使用StringBuffer

因为每一个String对象都会独立占用内存一块区域,如:

java 复制代码
String str = "aaa";    
String str2 = "bbb";    
String str3 = str + str2;   

假如执行此次之后str , str2再不被调用,那么它们就会在内存中等待GC回收,假如程序中存在过多的类似情况就会出现内存错误。

3. 尽量少用静态变量。

因为静态变量是全局的,GC不会回收。

4. 避免集中创建对象尤其是大对象,如果可以的话尽量使用流操作

JVM会突然需要大量内存,这时会触发GC优化系统内存环境;

如下在上传文件前,有如下操作

java 复制代码
m_totalBytes = m_request.getContentLength();    
m_binArray = new byte[m_totalBytes];    

因为m_totalBytes可能得到的数很大,导致数组分配了很多内存空间,而且该数组不能及时释放。

5. 尽量运用对象池技术以提高系统性能

生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏。

例如大集合对象拥有大数据量的业务对象时,可以考虑分块进行处理,然后解决一块释放一块的策略。

6. 不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。

可以适当的使用hashtable,vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次new之后又丢弃。

7. 优化配置。

  • 设置-Xms、-Xmx相等;

  • 设置NewSize、MaxNewSize相等;

  • 设置Heap size, PermGen space:

相关推荐
梵得儿SHI11 小时前
Java IO 流进阶:Buffer 与 Channel 核心概念解析及与传统 IO 的本质区别
java·开发语言·高并发·nio·channel·buffer·提升io效率
j_xxx404_12 小时前
Linux线程:从内存分页机制(Page Table/TLB/Page Fault)彻底读懂 Linux 线程本质
linux·运维·服务器·开发语言·c++·人工智能·ai
2301_7890156212 小时前
C++_string增删查改模拟实现
java·开发语言·c++
没有逆称12 小时前
Java OOM 问题全解析
java·jvm
星河耀银海12 小时前
JAVA 注解(Annotation):从原理到实战应用
java·开发语言·数据库
AI人工智能+电脑小能手12 小时前
【大白话说Java面试题 第68题】【JVM篇】第28题:对于 JDK 自带的监控和性能分析工具用过哪些?一般你怎么用的?
java·开发语言·jvm·面试
青梅橘子皮12 小时前
Linux---冯诺伊曼体系结构,操作系统概况
java·linux·运维
学习,学习,在学习12 小时前
Qt 串口通讯架构
开发语言·c++·qt·架构·qt5
Hexian258012 小时前
SpringAI MCP
java·spring·ai
一条泥憨鱼12 小时前
深入理解2026AI最大公约数:Agent
开发语言·人工智能·ai·agent