优秀的编程知识分享平台

网站首页 > 技术文章 正文

性能优化专题05-实战OutOfMemoryError异常

nanyue 2024-10-12 05:45:49 技术文章 3 ℃

实战OutOfMemoryError异常(下一篇:垃圾收集器)

Java堆溢出

错误原因: java.lang.OutOfMemoryError: Java heap space 堆内存溢出

解决办法:设置堆内存大小 // -Xms1m -Xmx10m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError

虚拟机栈溢出

错误原因: java.lang.StackOverflowError 栈内存溢出

栈溢出 产生于递归调用,循环遍历是不会的,但是循环方法里面产生递归调用, 也会发生栈溢出。

解决办法:设置线程最大调用深度

-Xss5m 设置最大调用深度

publicclassJvmDemo04 {
 privatestaticintcount;
 publicstaticvoidcount(){
 try{
 count++;
 count(); 
 } catch(Throwable e) {
 System.out.println("最大深度:"+count);
 e.printStackTrace();
 }
 }
 publicstaticvoidmain(String[] args) {
 count();
 }
}

内存溢出与内存泄漏区别

Java内存泄漏就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源(内存资源耗尽);

而Java内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。

内存溢出,这个好理解,说明存储空间不够大。就像倒水倒多了,从杯子上面溢出了来了一样。内存泄漏,原理是,使用过的内存空间没有被及时释放,长时间占用内存,最终导致内存空间不足,而出现内存溢出。

最近发表
标签列表