系列二、什么是OOM?什么是StackOverflowError?有哪些方法分析?

一、什么是OOM?

OOM是堆内存溢出,产生的原因是堆的空间大小是有限的,当堆空间的大小不足以满足创建对象所需要的内存空间时,就会抛出OOM的异常。

二、什么是StackOverflowError?

StackOverflowError是栈内存溢出的意思。栈中主要存储的是8种基本数据类型 + 引用类型 + 实例方法,栈的空间也是有限的,当存储进栈中的容量大于栈的最大容量时,就会报StackOverflowError的错误。

三、有哪些方法分析?

对于OOM来说,可以在程序运行时设置VM 参数,来观察堆内存溢出的细节,参数为:-XX:+PrintGCDetails

四、案例演示

4.1、OOM案例代码

java 复制代码
/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/16 15:31
 * @Description: 修改堆内存的最大值和最小值为10m,方便观察GC的回收过程
 * -Xms10m -Xmx10m -XX:+PrintGCDetails
 */
public class OomMainApp {
 
    public static void main(String[] args) {
        String message = "欧耶,今天星期五!";
        while (true) {
            message += message + new Random().nextInt(88888888) + new Random(99999999);
        }
    }
 
}

4.2、StackOverflowErroe案例代码

java 复制代码
/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/16 18:55
 * @Description: 测试栈溢出
 * 提前修改栈的大小:-Xss128k
 */
public class StackMainApp {

    private int stackLength = 1;

    public void stackLeak() {
        stackLength++;
        stackLeak();
    }

    public static void main(String[] args) {
        StackMainApp stackMainApp = new StackMainApp();
        try {
            stackMainApp.stackLeak();
        } catch (Throwable e) {
            System.out.println("stackLength = " + stackMainApp.stackLength);
            e.printStackTrace();
        }
    }

}
相关推荐
疯狂打码的少年5 小时前
CISC vs RISC 对比
jvm·笔记
逻极7 小时前
Java 从入门到精通:核心原理、最佳实践与性能优化
java·jvm·并发编程·集合框架
light blue bird9 小时前
Razor Pages工序管理Web端界面化实现方案
jvm·windows·web端
小江的记录本20 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
小江的记录本1 天前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
小江的记录本1 天前
【JVM虚拟机】垃圾回收GC:垃圾收集器:G1:Region分区、Mixed GC、回收流程、适用场景(高频)(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·spring cloud·面试
ID_180079054731 天前
小红书评论 API 接口详解与实战开发
java·jvm·c++
東雪木1 天前
JVM 与 Java 内存模型 专属复习笔记
java·jvm·笔记·java面试
Undergoer_TW1 天前
Colmap 进军嵌入式:SQLite 数据库从崩溃退出到自动治愈
jvm·数据库·sqlite
骄马之死1 天前
ThreadLocal 核心原理
java·jvm·算法