在JVM中,如果98%的時間是用於GC且可用的HeapSize不足2%時將會拋出OOM異常;HeapSize最大不要超過可用物理內存的80%,一般-Xms –Xmx設置爲相同,-Xmn設置爲1/4的-Xmx。若-Xms、-Xmx設置的大小超過物理內存,則會出現:
”Error occurred during initialization if VM could not reserve enoughspace fro object heap”
對於Web類型的應用(要求大吞吐量)堆大一些好,而對於GUI應用(要求實時響應)堆太大會佔用太多時間進行垃圾收集,這樣就不能實現較好的實時性,交互性會較差。
通常出現的錯誤:
“java.lang.OutOfMemeoryError:Java Heap space”是因爲JVM的默認堆大小是64MB,可以通過設置最大值和最小值實現。通常設置爲內存大小的80%,下面以1G內存爲例。
解決方案:
1)在Windows中添加環境變量
JAVA_OPTS=-Xm800m–Xmx800m
2)若用的是Tomcat,則在Tomcat的主目錄的bin/catalina.bat中加上
SetJava_OPTS=-Xm800m –Xmx800m
3)在Linux系統中,則在Tomcat的主目錄的bin/catalina.bat中加上
Set Java_OPTS=’-Xm800m –Xmx800m’
主要知識點:
JVM內存組成:新域(YoungGeneration)、舊域(Tenured Generation)和永久域(Perm Generation);新域有Eden和2個救助域構成;永久域保存在虛擬機的整個生存週期都存在的對象,永久域不會被垃圾收集器清空。