Javaメモリ設定の詳細(メモリオーバーフローの問題を含む解決)


一、一般的なJavaメモリオーバーフローには、1.java.lang.OutOfMemoryError:Java heap space----JVM HeapオーバーフローJVMは起動時に自動的にJVM Heapの値を設定し、その初期空間(-Xms)は物理メモリの1/64であり、最大空間(-Xmx)は物理メモリを超えてはならない.
JVMが提供する-Xmn-Xms-Xmxなどのオプションで設定できます.Heapの大きさはYoung GenerationとTenured Generaionの和です.
この例外情報は、JVMの98%がGCに使用され、使用可能なHeap sizeが2%未満の場合に投げ出されます.
解決策:JVM Heap(ヒープ)のサイズを手動で設定します.
2.java.lang.OutOfMemoryError:PermGen space----PermGen spaceオーバーフローPermGen spaceのフルネームはPermanent Generation spaceで、メモリの永久保存領域を指します.
なぜメモリがオーバーフローするのかというと、このメモリは主にJVMによってClassとMeta情報が格納されているため、ClassはLoadされたときにPermGen space領域に格納され、Instanceが格納されているHeap領域とは異なり、sunのGCはメインプログラムの実行期間中にPermGen spaceをクリアしないため、あなたのアプリが多くのCLASSをロードすると、PermGen spaceオーバーフローが発生する可能性が高いからです.
解決策:MaxPermSizeサイズを手動で設定する
3.java.lang.StackOverflowError----スタックオーバーフロースタックがオーバーフローし、JVMは依然としてスタック式の仮想マシンを採用しており、これはCとPascalと同じである.関数の呼び出しプロセスはスタックとバックスタックに反映されます.
コンストラクション関数を呼び出す「レイヤ」が多すぎて、スタック領域がオーバーフローしました.
一般に、一般的なスタック領域はスタック領域よりはるかに小さい.なぜなら、関数呼び出しプロセスは千以上の層を必要としないことが多いためであり、各関数呼び出しに1 Kの空間が必要であっても(これは、1つのC関数内で256個のintタイプを宣言した変数に相当する)、スタック領域は1 MBの空間を必要とするにすぎない.通常、スタックのサイズは1-2 MBです.通常、再帰も再帰の階層が多すぎず、オーバーフローしやすい.
解決方法:プログラムを変更します.
二、方法具体的なステップ1.linuxの下のtomcat:
TOMCAT_の変更HOME/bin/catalina.sh位置cygwin=false前.
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m" 

2.tomcat 5がwindowsサービスに登録され、services方式で起動されている場合は、レジストリ内の対応するキー値を変更する必要があります.レジストリの変更HKEY_LOCAL_MACHINESOFTWAREApache Software FoundationTomcat Service ManagementTomcat 5ParametersJava、右側のOptions
元の値は次のとおりです.
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"

-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"

-Xrs

に参加
-Xms256m -Xmx512m 

tomcatサービスを再開し、設定が有効になります.
**3.tomcat 6がwindowsサービスに登録されている場合、またはwindows 2003でtomcatのインストール版を使用して、/bin/tomcat 6 w.exeで修正すればよい.
4.myeclipseでtomcatを起動する場合、上記の変更は機能しません.Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDKパネルの
Optional Java VM argumentsに追加:
-Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m