zoukankan      html  css  js  c++  java
  • OOM与StackOverFlow发生的原因及解决办法【待完成】

    1,Out Of Memery 内存耗尽

    1,1 产生原因

      1.1.1  内存用完【堆内存】

    package com.cnblogs.mufasa;
    
    import org.junit.Test;
    
    import java.util.ArrayList;
    
    public class Model {
    
        @Test
        public void test(){
            ArrayList<Integer> arr=new ArrayList<>();
            while (true){
                arr.add(1);
            }
        }
    }
    /*
    java.lang.OutOfMemoryError: Java heap space
     */

      1.1.2  没有退出的递归调用

    1. 如果我们写一段程序不断的进行递归调用,而且没有退出条件,就会导致不断地进行压栈。类似这种情况,JVM 实际会抛出 StackOverFlowError;当然,如果 JVM 试图去扩展栈空间的的时候失败,则会抛出 OutOfMemoryError。
    2. 对于老版本的 Oracle JDK,因为永久代的大小是有限的,并且 JVM 对永久代垃圾回收(如,常量池回收、卸载不再需要的类型)非常不积极,所以当我们不断添加新类型的时候,永久代出现 OutOfMemoryError 也非常多见,尤其是在运行时存在大量动态类型生成的场合;类似 Intern 字符串缓存占用太多空间,也会导致 OOM 问题。对应的异常信息,会标记出来和永久代相关:“java.lang.OutOfMemoryError: PermGen space”。
    3. 随着元数据区的引入,方法区内存已经不再那么窘迫,所以相应的 OOM 有所改观,出现 OOM,异常信息则变成了:“java.lang.OutOfMemoryError: Metaspace”。

    1,2 如何解决

    1,3 注意事项

    2,Stack Over Flow 堆栈溢出

    2,1 产生原因

    package com.cnblogs.mufasa.SOF;
    
    import org.junit.Test;
    
    public class SOF_validate1 {
        public void recursive(){
            int cnt=0;
            StringBuilder sb=new StringBuilder();
            while (cnt<1){
                sb.append(new String(""+cnt));
                cnt++;
            }
            recursive();
        }
    
        @Test
        public void test(){
            recursive();//没有退出条件的递归
        }
    }
    /*
    java.lang.StackOverflowError
     */

    2,2 如何解决

    2,3 注意事项

    https://blog.csdn.net/qq_16973111/article/details/81258480

    https://blog.csdn.net/sunquan291/article/details/79109197

  • 相关阅读:
    【0003】与随机数有关的一些问题
    【0001】排序法与查找方式
    【0002】斐波那契数列,迷宫,汉诺塔
    【0001】C程序的编译过程
    django学习——request.POST.get(‘key’) 、 request.GET.get('key', '')
    django 删除数据库表后重新同步的方法
    Django链接mysql数据库报错1064
    sql练习题
    jmeter连接数据库
    购物车程序练习
  • 原文地址:https://www.cnblogs.com/Mufasa/p/11581563.html
Copyright © 2011-2022 走看看