2019/3/28 11:28:24
我們的(de)java程序在運行(xíng)時出現OutOfMemoryError: PermGen space有(yǒu)以下解決辦法:
1、盡早釋放(fàng)無用(yòng)對象的(de)引用(yòng)。好的(de)辦法是使用(yòng)臨時變量的(de)時候,讓引用(yòng)變量在退出活動域後,自動設置爲null,暗(àn)示垃圾收集器(qì)來收集該對象,防止發生内存洩露。
對于仍然有(yǒu)指針指向的(de)實例,jvm就不會(huì)回收該資源,因爲垃圾回收會(huì)将值爲null的(de)對象作爲垃圾,提高(gāo)GC回收機制(zhì)效率;
2、我們的(de)程序裏不可(kě)避免大(dà)量使用(yòng)字符串處理(lǐ),避免使用(yòng)String,應大(dà)量使用(yòng)StringBuffer,每一個(gè)String對象都(dōu)得獨立占用(yòng)内存一塊區域;
String str = "aaa";
String str2 = "bbb";
String str3 = str + str2;//假如(rú)執行(xíng)此次之後str ,str2以後再不被調用(yòng),那它就會(huì)被放(fàng)在内存中等待Java的(de)gc去回收,程序内過多的(de)出現這樣的(de)情況就會(huì)報上(shàng)面的(de)那個(gè)錯誤,建議在使用(yòng)字符串時能(néng)使用(yòng)StringBuffer就不要用(yòng)String,這樣可(kě)以省不少(shǎo)開(kāi)銷;
3、盡量少(shǎo)用(yòng)靜态變量,因爲靜态變量是全局的(de),GC不會(huì)回收的(de);
4、避免集中創建對象尤其是大(dà)對象,JVM會(huì)突然需要大(dà)量内存,這時必然會(huì)觸發GC優化系統内存環境;顯示的(de)聲明(míng)數組空間,而且申請數量還極大(dà)。
5、盡量運用(yòng)對象池技術(shù)以提高(gāo)系統性能(néng);生命周期長的(de)對象擁有(yǒu)生命周期短的(de)對象時容易引發内存洩漏,例如(rú)大(dà)集合對象擁有(yǒu)大(dà)數據量的(de)業(yè)務對象的(de)時候,可(kě)以考慮分(fēn)塊進行(xíng)處理(lǐ),然後解決一塊釋放(fàng)一塊的(de)策略。
6、不要在經常調用(yòng)的(de)方法中創建對象,尤其是忌諱在循環中創建對象。可(kě)以适當的(de)使用(yòng)hashtable,vector 創建一組對象容器(qì),然後從容器(qì)中去取那些對象,而不用(yòng)每次new之後又(yòu)丢棄
7、一般都(dōu)是發生在開(kāi)啓大(dà)型文(wén)件(jiàn)或跟數據庫一次拿了太多的(de)數據,造成 Out Of Memory Error 的(de)狀況,這時就大(dà)概要計(jì)算一下數據量的(de)最大(dà)值是多少(shǎo),并且設定所需最小(xiǎo)及最大(dà)的(de)内存空間值。
深圳市南山區南山街(jiē)道南海(hǎi)大(dà)道西(xī)桂廟路(lù)北陽光(guāng)華藝大(dà)廈1棟4F、4G-04
咨詢電話(huà):136 8237 6272
大(dà)客戶咨詢:139 0290 5075
業(yè)務QQ:195006118
技術(shù)QQ:179981967