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

posted on   周健康  阅读(1652)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示