实战:OutOfMemoryError

实战:OutOfMemoryError和StackOverflowError异常 Java堆溢出   Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。   -Xms:堆的最小值   -Xmx:堆的最大值   -XX:+HeapDumpOnOutOfMemoryError:可以让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事 阅读详情

一:Java堆溢出

VM参数:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError

public class DumpOutOfMemory {
    public static void main(String[] args) {
        List<OOMObject> list = new ArrayList<>();
        while (true) {
            list.add(new OOMObject());
        }
    }
}

运行结果:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid6828.hprof ...
Heap dump file created [28274507 bytes in 0.065 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

 二:栈溢出:

栈溢出有两种异常:

1.线程请求的栈深度大于虚拟机所允许的栈深度,将抛出StackOverflowEorror异常。

2.如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemeryError异常。

StackOverflowEorror验证:

public class JavaVMStackSOF {
    private int stackLength = 1;
    public void stackLeak() {
        stackLength++;
        stackLeak();
    }
    public static void main(String[] args) {
        new JavaVMStackSOF().stackLeak();
    }
}

OutOfMemeryError验证:JVM参数:-Xss20m

public class JavaVMStackOOM {
    private void dontStop() {
        while (true) {

        }
    }

    public void stackLeakByThread() {
        while (true) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    dontStop();
                }
            });
            thread.start();
        }
    }

    public static void main(String[] args) {
        new JavaVMStackOOM().stackLeakByThread();
    }
}

三:方法区和运行时常量池溢出

JDK1.7 就开始“去永久代”的工作了。 1.7把字符串常量池从永久代中剥离出来,存放在堆空间中。

在java1.8中,元数据区取代了永久代。元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。

数据区和永久代本质上都是方法区的实现。方法区存放虚拟机加载的类信息,静态变量,常量等数据。

因此,不会出现永久带溢出的异常了。。。。

public class RunTimeConstantPoolOOM {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        int i = 0;
        while (true) {
            list.add(String.valueOf("aaaaaa" + i++).intern());
        }
    }
}

JVM参数:-Xms10m -Xmx10m -XX:MetaspaceSize=8m  -XX:MaxMetaspaceSize=50m -XX:-UseGCOverheadLimit

输出:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3210)
    at java.util.Arrays.copyOf(Arrays.java:3181)
    at java.util.ArrayList.grow(ArrayList.java:265)

public class JavMethodAreaOOM {
    public static void main(String[] args) {
        while (true) {
            Enhancer enhance = new Enhancer();
            enhance.setSuperclass(OOMObject.class);
            enhance.setUseCache(false);
            enhance.setCallback((MethodInterceptor) (o, method, objects, methodProxy) -> methodProxy.invokeSuper(o, objects));
            enhance.create();
        }
    }
}

JVM参数:

-XX:MetaspaceSize=8m  -XX:MaxMetaspaceSize=50m

输出:

Exception in thread "main" java.lang.OutOfMemoryError: Metaspace
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:563)

 

避坑指南:RK3568双网口RMII模式DTS配置常见错误与调试技巧 本文详细解析了RK3568双网口RMII模式DTS配置中的常见错误与调试技巧,涵盖时钟配置、PHY识别、复位时序等关键问题。通过实战案例和系统化调试方法,帮助开发者快速解决百兆以太网连接不稳定、PHY识别失败等典型问题,提升开发效率。 阅读详情

相关推荐

CVPR 2024 LaTeX 模板实战:从匿名提交到图表排版的避坑指南

本文详细解析CVPR 2024 LaTeX模板的使用技巧,涵盖匿名提交设置、pdfLaTeX编译器选择、图表排版优化等关键环节。通过实战案例演示智能引用、公式编号、三线表制作等专业技巧,帮助研究者高效完成论文格式规范,规避常见排版错误。特别针对双栏格式下的图片定位、跨栏表格等复杂场景提供解决方案。

weixin_42561040的博客 453

JVM学习笔记--04实战:OutOfMemoryError异常

上篇学习到虚拟机如何对象的概念,其中提到基础OutOfMemoryError异常,本篇具体学习下。 在《Java虚拟机规范》的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM)异常的可能,本篇将通过若干实例来验证异常实际发生的代码场景,并且将初步介绍若干最基本的与自动内存管理子系统相关的HotSpot虚拟机参数。 本篇实战的目的有两...

qq_29434541的博客 392

告别外置电阻!揭秘MAX22201集成电流检测的5大设计优势(附PCB布局案例)

本文深入解析MAX22201集成电流检测技术在直流有刷电机驱动中的5大设计优势,包括BOM成本降低、PCB空间优化、动态性能提升等。通过与传统方案(如DRV8871+外置电阻)的实测对比,展示其在高精度电流检测、抗干扰能力和PCB布局简化方面的突破,并附有详细的PCB布局案例和配置指南。

weixin_29189377的博客 243

Java内存溢出异常及其处理

熟悉Java内存划分及运行的首要目的就是预防JVM抛出内存溢出相关的异常,或者说当发生这样异常是该如何排查问题,定位问题并且给出合理的解决方案,这对于开发工作以及后期维护工作的顺利进行尤为重要。 一、在Java语言中,对象访问是如何进行的? 即使是最简单的访问,也会涉及Java栈、Java堆、方法区这三个最重要内存区域之间的关联关系。比如下面这行代码: Object...

智者千虑,必有一失;愚者千虑,必有一得。 1万+

PPPoE上网配置不求人:华为路由器命令行操作指南(2023最新版)

本文提供2023年最新的华为路由器PPPoE上网配置命令行操作指南。通过详细的步骤讲解,从连接设备、创建拨号接口、绑定PPPoE客户端到配置内网与NAT,手把手教你完成配置,并附有验证排错方法,助你轻松实现稳定上网。

s4t5u6v的博客 679

嵌入式编程模型 | 原型模式

本文介绍了原型模式在嵌入式传感器网络中的应用。原型模式通过复制现有对象创建新实例,避免了重复初始化开销,适用于设备配置克隆、状态复制等场景。文章以传感器网络为例,展示了原型模式的结构(抽象原型类、具体原型类、客户端)和实现方式,通过C语言代码演示了温度/湿度传感器的克隆过程。该模式能有效提升嵌入式系统资源复用效率,实现快速部署相似配置的传感器节点,同时保持内存优化和配置灵活性。

嵌入式大杂烩 146

arrays中copyof_Java中:常见的几种内存溢出及解决方案,再遇到后就可以解决了...

1.JVM Heap(堆)溢出:java.lang.OutOfMemoryError: Java heap space JVM在启动的时候会自动设置JVM Heap的值, 可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap的大小是Young Generation 和Tenured Generaion 之和。在JVM中如果98%的时间是用于GC,且可用的Heap size 不...

weixin_39700548的博客 4248

基于libVLC的视频播放器之四:直接使用libVLC

一.效果 播放本地文件 播放网络url:rtsp://3.84.6.190/vod/mp4:BigBuckBunny_115k.mov 二.实现 既然有VLC-Qt,为什么还要直接调用libVLC呢,因为直接调用会加深对整个播放流程的理解,方便后面修改VLC-Qt源码。 注意事项: 1.编译报错:error C2065: “libvlc_media_read_cb”: 未声明的标识符。修改如下: 2.libvlc_new(0, nullptr)返回null 将plugins

草上爬的博客 5049

OutOfMemoryError异常

除了程序计数器外,虚拟机内存在其他几个运行时区域都有发生OutOfMemoryError异常的可能。

子时已过的博客 2108

Camunda 7.x 系列【67】实战篇之撤销流程

撤销流程 即撤销当前已发起的流程实例。这是一个常见的需求,Camunda本身不提供直接的方法来撤销正在执行的流程,需要自定义处理逻辑。

记录知识、锤炼自我 1377

190、LLC谐振变换器的样机调试实战(问题定位)

这篇实战笔记总结了LLC谐振变换器样机调试中的五大典型问题及解决方案:1)空载炸机源于谐振电容纹波电流能力不足;2)轻载啸叫因控制环路不稳定,需调整突发模式阈值;3)MOSFET过热由死区时间不当导致,需精确优化实现ZVS;4)输出纹波大由PCB布局耦合引起,需优化共模抑制;5)启动过冲需延长软启动时间。作者强调调试需结合示波器、热成像仪等工具,理论计算与实测并重,并详细记录每次参数调整。文章指出LLC调试是不断试错的过程,关键是通过现象分析本质原因。

Jack010169的博客 49

解析 OutOfMemoryError 异常

OutOfMemoryError:内存溢出、内存泄漏 (Java虚拟机:HotSpot) 本文将从两个方面对OutOfMemoryError进行解析: 1.通过demo验证Java虚拟机规范中描述的各个运行...

抛弃幻想,准备斗争 522

092、Python在芯片验证中的应用:从脚本小子到验证架构师

Python在芯片验证中的高效应用 本文通过实际案例展示了Python在芯片验证中的关键作用。凌晨三点的调试场景揭示了传统方法的局限,Python脚本能在20分钟内分析80GB波形数据定位FIFO指针问题。文章重点介绍了两个核心工具: 智能日志分析系统:通过正则表达式和上下文分析,自动分类百万行验证日志中的错误,生成可视化报告,效率远超传统grep方法。 寄存器模型生成器:将Excel表格自动转换为UVM寄存器模型代码,将原本需要两周的手工工作缩短至两小时,同时保证零错误。 文章还展示了Python与Sys

z534437748的博客 72

实战:OutOfMemoryError异常

在《Java虚拟机规范》的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM)异常的可能, 本文的目的有两个: 第一,通过代码验证《Java虚拟机规范》中描述的各个运行时区域储存的内容; 第二,工作中遇到实际的内存溢出异常时,能根据异常的提示信息迅速得知是哪个区域的内存溢出,知道怎样的代码可能会导致这些区域内存溢出,以及出现这些异常后该如何处理。 Java堆溢出 Java堆用于储存对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间

张紫娃的博客 969

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

实战:OutOfMemoryError 异常

本节内容的目的有两个,第一,通过代码验证Java虚拟机规范中描述的各个运行时区域存储的内容;第二,希望读者在工作中遇到实际的内存溢出异常时,能根据异常的信息快速判断是哪个区域的内存溢出,知道什么样的代码可能会导致这些区域内存溢出,以及出现这些异常后该如何处理。

技术分享,读书笔记,面试宝典,算法积累,应有尽有~ 571

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Kettle内存优化实战:解决Windows下OutOfMemoryError的5种有效方法

本文详细介绍了在Windows环境下优化Kettle内存使用的5种有效方法,解决常见的OutOfMemoryError问题。从JVM参数调优、数据分块处理到步骤优化和系统级调整,提供了一套完整的实战方案,帮助用户高效处理海量数据,避免内存溢出。特别适合处理金融交易记录和电商平台日志等大数据场景。

weixin_29284885的博客 447

实战:OutOfMemoryError异常

2.4 实战:OutOfMemoryError异常 本节实战的目的有两个:第一,通过代码验证《Java虚拟机规范》中描述的各个运行时区域储存 的内容;第二,希望读者在工作中遇到实际的内存溢出异常时,能根据异常的提示信息迅速得知是哪 个区域的内存溢出,知道怎样的代码可能会导致这些区域内存溢出,以及出现这些异常后该如何处 理。 本节所列的代码均由笔者在基于OpenJDK 7中的HotSpot虚拟机上进行过实际测试,如无特殊说 明,对其他Op enJDK版本也应当适用。不过读者需意识到内存溢出异常与虚拟机本身

qq_40826814的博客 801

阅读笔记——实战:OutOfMemoryError

two targets One:验证java虚拟机规范中描述的各个运行时区域存储的内容; Two:在工作中遇到OOM时能根据异常的信息快速判断是哪个区域的内存溢出,知道怎样的代码会导致这些区域内存溢出,以及如何处理。 -java堆溢出 java heap用来存放对象实例,不断的创建对象,并保证这些对象可达。在达到最大容量限制就会产生内存溢出。-Xmx, -Xms, -Xmn(Young)...

yanfei0331的博客 180

java的OutOfMemoryError: PermGen space实战剖析

由Word导出为PDF,导致java.lang.OutOfMemoryError: PermGen space 永生代空间不足,导致内存溢出,用jvisualvm监控了一下,永生代默认值80~90M,没执行此方法前,都快占满了。 解决办法:提高永生代内存配置值 -Xms512M -Xmx1024M -XX:PermSize=512m -XX:MaxPermSize=512m ...

weixin_33860553的博客 94
上一篇: Linux之文件权限
下一篇: 类加载器深入剖析
给自己加加油
博客等级 码龄8年 302粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值