1 盡早釋放無用的對象入蛆。
在變量退出活動區(qū)域后自動設(shè)置為null(雖然這樣在JAVA里面基本是沒用的,詳見:
https://blog.csdn.net/qq_42945742/article/details/84107531](https://blog.csdn.net/qq_42945742/article/details/84107531)
但是這是一種良好的習(xí)慣硕勿,建議變量退出活動區(qū)域后自動設(shè)置為null
2 函數(shù)遞歸是一定要注意函數(shù)遞歸調(diào)用的深度哨毁。深度過大很有可能會導(dǎo)致棧幀溢出
3 程序進行字符串處理時,避免使用String 而要盡量使用StringBuffer
如:String str=“a” String str2="b" String str3="c" 這樣內(nèi)存中一定存在三個對象源武,并且如果str str2不再被調(diào)用扼褪,那么他們就
會成為內(nèi)存的垃圾,等待回收
4 盡量少使用靜態(tài)變量:方法區(qū)中的靜態(tài)變量是gc root掃描的類型之一粱栖,也就是說靜態(tài)變量永遠(yuǎn)不會jvm回收话浇。
5 盡量減少不可預(yù)測的內(nèi)存對象。如在文件上傳時候 經(jīng)常會出現(xiàn)java.outofMemoryError的錯誤闹究,
看代碼:m_totalBytes = m_request.getContentLength();
m_binArray = new byte[m_totalBytes];
這里對新建對象的大小沒有限制幔崖,如果并發(fā)較高,而文件又比較大,短時間會導(dǎo)致內(nèi)存急劇增大而出現(xiàn)oom錯誤岖瑰。
解決方案很多叛买,我們可以每次限制申請的內(nèi)存的大小為1M。http://bbs.xml.org.cn/blog/more.asp?name=hongrui&id=3747
6 盡量使用內(nèi)存池技術(shù)提高系統(tǒng)的性能蹋订。
聲明周期長的對象擁有生命周期短的對象時容易引發(fā)內(nèi)存泄漏率挣,例如:大集合對象擁有大數(shù)據(jù)量的業(yè)務(wù)對象的時候,可以考慮分塊處理露戒,然后一塊一塊釋放的策略椒功。
7 不要在經(jīng)常調(diào)用的方法中創(chuàng)建對象,特別忌諱在循環(huán)中創(chuàng)建對象智什。
建議可以使用java內(nèi)嵌的一些數(shù)據(jù)結(jié)構(gòu)动漾,hashtable vector中存放一些對象,然后使用時再去容器里面去取荠锭,不用每次new后載
丟棄
8 把配置增大 a.設(shè)置-Xms旱眯、-Xmx相等;
b.設(shè)置NewSize证九、MaxNewSize相等删豺;
c.設(shè)置Heap size, PermGen space:
9:減少避免內(nèi)存泄漏主要思想是:1 千萬不要出現(xiàn)對象廢棄了但是依然存在引用導(dǎo)致不能釋放的情況
2 不要申請不可預(yù)期的內(nèi)存如 new byte[x] x不可預(yù)測
3 避免循環(huán)中出現(xiàn)申請內(nèi)存的操作
4 盡量復(fù)用對象 減少運行期間產(chǎn)生垃圾的情況,降低gc頻率的同時也減少內(nèi)存泄漏的可能性愧怜。