向書本學(xué)習(xí),還要向?qū)嵺`學(xué)習(xí)、向生活學(xué)習(xí)。消化已有知識,
而且要力求有所發(fā)現(xiàn)、有所發(fā)明、有所創(chuàng)造
2019/3/28 11:28:24
我們的java程序在運(yùn)行時出現(xiàn)OutOfMemoryError: PermGen space有以下解決辦法:
1、盡早釋放無用對象的引用。好的辦法是使用臨時變量的時候,讓引用變量在退出活動域后,自動設(shè)置為null,暗示垃圾收集器來收集該對象,防止發(fā)生內(nèi)存泄露。
對于仍然有指針指向的實(shí)例,jvm就不會回收該資源,因?yàn)槔厥諘⒅禐閚ull的對象作為垃圾,提高GC回收機(jī)制效率;
2、我們的程序里不可避免大量使用字符串處理,避免使用String,應(yīng)大量使用StringBuffer,每一個String對象都得獨(dú)立占用內(nèi)存一塊區(qū)域;
String str = "aaa";
String str2 = "bbb";
String str3 = str + str2;//假如執(zhí)行此次之后str ,str2以后再不被調(diào)用,那它就會被放在內(nèi)存中等待Java的gc去回收,程序內(nèi)過多的出現(xiàn)這樣的情況就會報上面的那個錯誤,建議在使用字符串時能使用StringBuffer就不要用String,這樣可以省不少開銷;
3、盡量少用靜態(tài)變量,因?yàn)殪o態(tài)變量是全局的,GC不會回收的;
4、避免集中創(chuàng)建對象尤其是大對象,JVM會突然需要大量內(nèi)存,這時必然會觸發(fā)GC優(yōu)化系統(tǒng)內(nèi)存環(huán)境;顯示的聲明數(shù)組空間,而且申請數(shù)量還極大。
5、盡量運(yùn)用對象池技術(shù)以提高系統(tǒng)性能;生命周期長的對象擁有生命周期短的對象時容易引發(fā)內(nèi)存泄漏,例如大集合對象擁有大數(shù)據(jù)量的業(yè)務(wù)對象的時候,可以考慮分塊進(jìn)行處理,然后解決一塊釋放一塊的策略。
6、不要在經(jīng)常調(diào)用的方法中創(chuàng)建對象,尤其是忌諱在循環(huán)中創(chuàng)建對象。可以適當(dāng)?shù)氖褂胔ashtable,vector 創(chuàng)建一組對象容器,然后從容器中去取那些對象,而不用每次new之后又丟棄
7、一般都是發(fā)生在開啟大型文件或跟數(shù)據(jù)庫一次拿了太多的數(shù)據(jù),造成 Out Of Memory Error 的狀況,這時就大概要計(jì)算一下數(shù)據(jù)量的最大值是多少,并且設(shè)定所需最小及最大的內(nèi)存空間值。
深圳市南山區(qū)南山街道南海大道西桂廟路北陽光華藝大廈1棟4F、4G-04
咨詢電話:136 8237 6272
大客戶咨詢:139 0290 5075
業(yè)務(wù)QQ:195006118
技術(shù)QQ:179981967
客戶案列
新聞資訊
資質(zhì)榮譽(yù)
團(tuán)隊(duì)風(fēng)采
項(xiàng)目進(jìn)度查詢
售前QQ咨詢
QQ溝通 項(xiàng)目QQ溝通