1. OutOfMemoryError: Java heap space 堆溢出
內存溢出主要存在問題就是出現在這個情況中。當在JVM中如果98%的時間是用於GC且可用的 Heap size 不足2%的時候將拋出此異常信息。
2. OutOfMemoryError: PermGen space 非堆溢出(永久保存區域溢出)
這種錯誤常見在web服務器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)那麼就會產生此錯誤信息了。如果web app用了大量的第三方jar或者應用有太多的class文件而恰好MaxPermSize設置較小,超出了也會導致這塊內存的佔用過多造成溢出,或者tomcat熱部署時侯不會清理前面加載的環境,只會將context更改爲新部署的,非堆存的內容就會越來越多。
3. OutOfMemoryError: unable to create new native thread. 無法創建新的線程
這種現象比較少見,也比較奇怪,主要是和jvm與系統內存的比例有關。這種怪事是因爲JVM已經被系統分配了大量的內存(比如1.5G),並且它至少要佔用可用內存的一半。
解決:
eclipse 中:
在eclipse根目錄下打開eclipse.ini
-vmargs
-Xms256m
-Xmx1024m
tomcat中:
bin目錄下的catalina.bat
在第二行( @echo off 下)添加如下代碼:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:PermSize=512M -XX:MaxPermSize=512m
原理:
https://yq.aliyun.com/articles/609276?utm_content=m_1000007074