【240期】面试官:你了解JVM的内存溢出吗?

【240期】面试官:你了解JVM的内存溢出吗?

Java堆溢出

Java堆用于存储对象实例,只要不断地创建对象,当对象数量到达最大堆的容量限制后就会产生内存溢出异常。最常见的内存溢出就是存在大的容器,而没法回收,比如:Map,List等。

  • 内存溢出:内存空间不足导致,新对象无法分配到足够的内存;
  • 内存泄漏:应该释放的对象没有被释放,多见于自己使用容器保存元素的情况下。

出现下面信息就可以断定出现了堆内存溢出。

java.lang.OutOfMemoryError: Java heap space

保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象

示例

设置JVM内存参数:

Exception in thread "main" java.lang.OutOfMemoryError
 at sun.misc.Unsafe.allocateMemory(Native Method)
 at com.xiaolyuh.DirectMemoryOutOfMemoryErrorTest.main(DirectMemoryOutOfMemoryErrorTest.java:23)

由DirectMemory导致的内存溢出,一个明显的特征是在Heap Dump文件中不会看见明显的异常,如果读者发现OOM之后Dump文件很小,而程序中又直接或间接使用了NIO,那就可以考虑检查一下是不是这方面的原因。

解决方案

通过-XX:MaxDirectMemorySize指定直接内存大小。

源码

https://github.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases

作者:xiaolyuh

来源:my.oschina.net/xiaolyuh/blog/3151354

END

十期推荐

【221期】面试官:谈谈内存泄漏和内存溢出的联系与区别

【222期】ZooKeeper 相关面试演练

【223期】面试官:在MySQL查询中,为什么要用小表驱动大表

【224期】MySQL索引相关面试演练

【225期】面试官:公司项目中Java的多线程一般用在哪些场景?

【226期】面试官:内存耗尽后Redis会发生什么

【227期】面试官:说说双重检查加锁单例模式为什么两次判断?

【228期】面试高频:Java常用的八大排序算法一网打尽!

【229期】面试官:怎么解决Eureka某一个服务挂掉的问题?

【230期】面试官:讲讲Bean的加载过程


与其在网上拼命找题? 不如马上关注我们~

【240期】面试官:你了解JVM的内存溢出吗?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/7955.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!