在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个救助域构成;永久域保存在虚拟机的整个生存周期都存在的对象,永久域不会被垃圾收集器清空。
原文地址:http://blog.csdn.net/wenwen1538/article/details/37994347