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
十期推荐
【223期】面试官:在MySQL查询中,为什么要用小表驱动大表
【225期】面试官:公司项目中Java的多线程一般用在哪些场景?
【227期】面试官:说说双重检查加锁单例模式为什么两次判断?
【229期】面试官:怎么解决Eureka某一个服务挂掉的问题?
与其在网上拼命找题? 不如马上关注我们~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/7955.html