内存溢出解决办法
设置堆内存大小
错误原因: java.lang.OutOfMemoryError: Java heap space
解决办法:设置堆内存大小 -Xms1m -Xmx70m -XX:+HeapDumpOnOutOfMemoryError
publicstaticvoid main(String[] args) throws InterruptedException {
List<Object> list = new ArrayList<>();
Thread.sleep(3000);
jvmInfo();
for (inti = 0; i < 10; i++) {
System.out.println("i:"+i);
Byte [] bytes= new Byte[1*1024*1024];
list.add(bytes);
jvmInfo();
}
System.out.println("添加成功...");
}
设置栈内存大小
错误原因: java.lang.StackOverflowError
栈溢出 产生于递归调用,循环遍历是不会的,但是循环方法里面产生递归调用, 也会发生栈溢出。
解决办法:设置线程最大调用深度
-Xss5m 设置最大调用深度
publicclass JvmDemo04 {
privatestaticintcount;
publicstaticvoid count(){
try {
count++;
count();
} catch (Throwable e) {
System.out.println("最大深度:"+count);
e.printStackTrace();
}
}
publicstaticvoid main(String[] args) {
count();
}
}
Tomcat内存溢出在catalina.sh 修改JVM堆内存大小
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m
-XX:MaxPermSize=512m -XX:MaxNewSize=512m"