完美解決PermGen space異常的問題
開發(fā)中遇到Eclipse報錯:java.lang.OutOfMemoryError: PermGen space。
PermGen space百度翻譯為:永久區(qū)域內(nèi)存不足。
1. 先來一張jvm結(jié)構(gòu)圖:

內(nèi)存不足問題一般都是發(fā)生在'堆‘上,GC作用區(qū)域也是在'堆‘上。
2. 這個'堆‘又劃分成了好幾塊區(qū)域,包括:
新生代:包括伊甸園區(qū)和存活區(qū)。
老年代:
永久帶:jdk1.8后變成元空間,元空間不再占用堆中的空間,而永久帶卻是在堆中開辟空間。

可以發(fā)現(xiàn),堆中就有個永久區(qū)。永久區(qū)的內(nèi)存溢出,其實就是堆的內(nèi)存不夠用。
只需要調(diào)大堆的內(nèi)存大小就可以解決問題。
3. 調(diào)整堆大小的參數(shù):
-Xms256m -Xmx1024m
-Xms:堆的初始化大小,這里設(shè)置成了256m.
-Xmx:堆最大的大小,這個設(shè)置成了1024m.
這里面就存在了一個可伸縮的空間,而這個空間的存在會損耗服務(wù)的性能。因為擴容和釋放空間都是有性能損耗的。
最好的辦法就是:-Xms和-Xmx設(shè)置成同樣的大小。這樣就不存在可伸縮的空間了。
4. jvm參數(shù)的配置位置。
a. 如果是使用tomcat服務(wù):
修改tomcat/bin目錄下的catalina.bat。(windows環(huán)境下修改文件catalina.bat, linux環(huán)境下修改文件catalina.sh)

配置在文件的第一行:

b.如果是eclipse
修改eclipse的Run Configurations。(如果是debug模式,修改Debug Configurations。)

寫在此處,方便拷貝:
-Xms256m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=512m

c.如果已經(jīng)被配置成了服務(wù)
這種情況,就需要修改注冊表了。
c1. regedit命令打開注冊表。
c2. 找到配置的tomcat服務(wù)。

修改:JvmMs,JvmMx,Options里面的參數(shù)值。
c3. 修改完畢后需要重啟服務(wù)。
d. Eclipse的配置文件eclipse.ini中也可以配置jvm參數(shù)。

-vmargs -Xms512m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize=512M
至此,內(nèi)存溢出的問題應(yīng)該就解決了。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Springboot整合企業(yè)微信機器人助手推送消息的實現(xiàn)
本文主要介紹了Springboot整合企業(yè)微信機器人助手推送消息的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
SpringBoot?整合?ElasticSearch操作各種高級查詢搜索
這篇文章主要介紹了SpringBoot?整合?ES?進行各種高級查詢搜索的實踐記錄,本文主要圍繞?SpringBoot?整合?ElasticSearch?進行各種高級查詢的介紹,需要的朋友可以參考下2022-06-06
Java使用自定義注解+反射實現(xiàn)字典轉(zhuǎn)換代碼實例
這篇文章主要介紹了Java使用自定義注解+反射實現(xiàn)字典轉(zhuǎn)換代碼實例,注解是一種能被添加到j(luò)ava代碼中的元數(shù)據(jù),類、方法、變量、參數(shù)和包都可以用注解來修飾,注解對于它所修飾的代碼并沒有直接的影響,需要的朋友可以參考下2023-09-09
java 數(shù)據(jù)結(jié)構(gòu)二叉樹的實現(xiàn)代碼
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)二叉樹的實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2016-09-09

