java.lang.OutOfMemoryError: GC overhead limit exceeded 异常解决

产生原因

GC回收时间过长时会抛出OutOfMemroyError,过长的定义是,超过98%的时间用来做GC并且回收了不到2%的堆内存,连续多次GC 都只回收了不到2%的极端情况下才会抛出(最起码已经进行了5次连续的垃圾回收)。

解决方法

1、增加heap堆内存
2、一般出现这种问题跟内存其实没太大关系,主要还是代码问题,代码中出现了大量占用内存的对象,一定要检查代码,下面我们来代码演示。

代码演示

演示JVM参数配置

-Xms20m -Xmx20m -XX:+PrintGCDetails -XX:MaxDirectMemorySize=5m
第一步
在这里插入图片描述
第二步
在这里插入图片描述
第三步

import java.util.ArrayList;
import java.util.List;

public class GCOverheadDemo {
    public static void main(String[] args) {
        int i = 0;
        List<String> list = new ArrayList<>();
        try {
        	//大量占内存的对象
            while (true){
                list.add(String.valueOf(++i).intern());
            }
        }catch (Throwable e){
            System.out.println("*********i:"+i);
            e.printStackTrace();
            throw e;
        }
    }
}

运行结果:
在这里插入图片描述

引用\[1\]中提到了一个错误重现的信息,其中包含了一个Java异常java.lang.OutOfMemoryError: GC overhead limit exceeded。这个异常通常是由于JVM物理内存过小引起的。默认情况下,Java虚拟机的最大内存只有64兆,这在开发和调试过程中可能没有问题,但在实际的应用环境中可能无法满足需求,特别是在应用程序较大或者有较高的访问量时。因此,我们需要增加Resin可用的虚拟机内存大小来解决这个问题。\[3\] 你可以通过调整Java虚拟机的内存参数来增加可用内存。具体的方法可以参考\[2\]中提供的链接,该链接提供了解决java.lang.OutOfMemoryError异常的方法。 #### 引用[.reference_title] - *1* [java.lang.OutOfMemoryError: GC overhead limit exceeded问题分析及解决](https://blog.csdn.net/whc888666/article/details/128496598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [java.lang.OutOfMemoryError:GC overhead limit exceeded异常解决方法](https://blog.csdn.net/m0_43393325/article/details/114397041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值