内存溢出的产生和解决方案

为什么会发生OOM(内存溢出)

a、JVM设置的内存过小,而业务运行却需要较多的内存(这样会导致程序运行不起来,或者是运行一段时间后就挂了)。

b、GC回收内存的速度赶不上程序运行消耗内存的速度(大量数据往集合里面插)。

c、存在内存泄漏,时间一久就出现内存溢出。

OOM场景一:Java heap space

JVM参数设置堆大小:-Xmx100m -Xms100m 

// 大对象导致堆内存溢出例子

   @GetMapping("/t")
    public Result test() throws Exception{
        //初始化一个大对象数组
        byte[] array=new byte[1024*1024*80];
        return Result.ok("12313");
    }

 解决方案:

 提供更多的 Java 堆空间,这样是治标不治本。正确的方式是分析一下的两个问题:

a、哪些对象占据堆的大部分

b、 在源代码中分配这些对象的位置

OOM场景二 : GC overhead limit exceeded

你的应用程序花费太多的时间做垃圾收集太少的结果JVM的方式。默认情况下,如果 JVM 花费超过98% 的总时间进行 GC 并且在 GC 之后仅回收不到 2% 的堆,则JVM 被配置为抛出此错误。

解决方案:

a、哪些对象占据堆的大部分

b、 在源代码中分配这些对象的位置

ps:使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值