1. 程式人生 > >java.lang.OutOfMemoryError: PermGen 解決方案

java.lang.OutOfMemoryError: PermGen 解決方案

異常資訊

java.lang.OutOfMemoryError: PermGen

這個異常是由JVM 方法區中永久代(PermGen)記憶體溢位或記憶體洩露導致的,而Java方法區的永久代(PermGen)在JDK8之後由元空間替代,永久代被廢棄。

為什麼要廢棄永久代(PermGen)呢?

官方是這麼解釋的:

This is part of the JRockit and Hotspot convergence effort. JRockit customers do not need to configure the permanent generation (since JRockit does not have a permanent generation) and are accustomed to not configuring the permanent generation.

大概的意思:移除永久代是為融合HotSpot JVM與 JRockit VM而做出的努力,因為JRockit沒有永久代,不需要配置永久代。

現實使用中易出問題:

由於永久代記憶體經常不夠用或發生記憶體洩露,爆出異常java.lang.OutOfMemoryError: PermGen

解決方法

1.手動設定MaxPermSiz(不推薦)

手動設定MaxPermSize大小修改TOMCAT_HOME/bin/catalina.bat(windows系統)或者catalina.sh(unix系統)在“echo “Using CATALINA_BASE: $CATALINA_BASE””上面加入以下行:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m

2.升級到JDK8及以上(推薦)

這個方法是最有用的方式了,因為永久代在JDK8以後被廢棄了,替換為元空間,這樣的問題就不會再出現了。

這是之前工作中遇到的一個坑,分享一下。