打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java开发过程中会出现哪些OOM?

什么是OOM?OOM时Java开发中不可避免的一个常见问题,尤其在面试时,面试官会经常问到“谈谈你对OOM的认识”。本文整理一些Java开发过程中常见的OOM,希望看完本文对大家有所帮助。

java.lang.OutOfMemoryError:Java heap space

溢出原因:深入理解Java虚拟机书中讲到java堆溢出,Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。

java.lang.OutOfMemoryError:GC overhead limit exceeded

GC回收时间长时会抛出OutOfMemoryError。过长的定义是,超过98%的时间用来做GC并且回收了不到2%的堆内存,连续多次GC都只回收了不到2%的极端情况下才会抛出。假设不抛出GC overhead limit错误会发生什么情况呢?那就是GC清理的这么点内存很快会再次填满,迫使GC再次执行,这样就形成恶性循环,CPU使用率一直是100%,而GC确没有任何成果。

java.lang.OutOfMemoryError:Direct buffer memory

Direct memory可以通过参数-XX:MaxDirectMemorySize设定本机直接内存可用大小,如果不指定,则默认与java堆内存大小相同。过使用-XX:MaxDirectMemorySize=5M,限制最大可使用的本机直接内存大小为5MB,如果超过将抛出异常。

java.lang.OutOfMemoryError:unable to create new native thread

不知道你们生产环境是否会出现这种情况,高并发请求服务器时,经常出现如下异常java.lang.OutOfMemoryError:unable to create new native thread。那出现的原因呢?

1.创建太多的线程了

2.服务器的设置限制了你创建线程的数量了

java.langOutOfMemoryError:Metaspace

我们知道Java8及以后已经使用Metaspace来替代永久代,Metaspace并不在虚拟机内存中而是使用本地内存。主要还是是加载到内存中的class数量太多或者体积太大。这时可以通过JVM参数-XX:MaxMetaspaceSize指定。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
常见的 OOM 异常分析(硬核干货)
Java程序员必备:常见OOM异常分析
Java 8新特性探究(九)跟OOM:Permgen说再见吧
Java 常见内存溢出异常与代码实现
JAVA面试解析(有赞二面)
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服