1 尽早释放无用的对象。
在变量退出活动区域后自动设置为null(虽然这样在JAVA里面基本是没用的,详见:
https://blog.csdn.net/qq_42945742/article/details/84107531](https://blog.csdn.net/qq_42945742/article/details/84107531)
但是这是一种良好的习惯,建议变量退出活动区域后自动设置为null
2 函数递归是一定要注意函数递归调用的深度。深度过大很有可能会导致栈帧溢出
3 程序进行字符串处理时,避免使用String 而要尽量使用StringBuffer
如:String str=“a” String str2="b" String str3="c" 这样内存中一定存在三个对象,并且如果str str2不再被调用,那么他们就
会成为内存的垃圾,等待回收
4 尽量少使用静态变量:方法区中的静态变量是gc root扫描的类型之一,也就是说静态变量永远不会jvm回收。
5 尽量减少不可预测的内存对象。如在文件上传时候 经常会出现java.outofMemoryError的错误,
看代码:m_totalBytes = m_request.getContentLength();
m_binArray = new byte[m_totalBytes];
这里对新建对象的大小没有限制,如果并发较高,而文件又比较大,短时间会导致内存急剧增大而出现oom错误。
解决方案很多,我们可以每次限制申请的内存的大小为1M。http://bbs.xml.org.cn/blog/more.asp?name=hongrui&id=3747
6 尽量使用内存池技术提高系统的性能。
声明周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如:大集合对象拥有大数据量的业务对象的时候,可以考虑分块处理,然后一块一块释放的策略。
7 不要在经常调用的方法中创建对象,特别忌讳在循环中创建对象。
建议可以使用java内嵌的一些数据结构,hashtable vector中存放一些对象,然后使用时再去容器里面去取,不用每次new后载
丢弃
8 把配置增大 a.设置-Xms、-Xmx相等;
b.设置NewSize、MaxNewSize相等;
c.设置Heap size, PermGen space:
9:减少避免内存泄漏主要思想是:1 千万不要出现对象废弃了但是依然存在引用导致不能释放的情况
2 不要申请不可预期的内存如 new byte[x] x不可预测
3 避免循环中出现申请内存的操作
4 尽量复用对象 减少运行期间产生垃圾的情况,降低gc频率的同时也减少内存泄漏的可能性。
网友评论