JVM内存泄露(OOM)!带你一一揭秘【第一弹】
2020-03-24 本文已影响0人
测试帮日记
我们将分成多次介绍内存泄露OOM的内容,大致套路为现象、原因、解决方案。简单清晰,不玩高大上。记得给转发一下,哈哈
OOM最典型的表现:java.lang.OutOfMemoryError,你记住了吗?
1 OOM的现象之一
今天介绍第一种Java heap space
2 什么原因造成的?
1)应用程序尝试添加更多的数据放入堆空间,但没有足够的空间供它,当JVM达到堆大小限制时,都会引发Java堆空间错误
2)数据量激增。当用户数量或数据量突然达到峰值并超过预期阈值时,在峰值之前正常运行的操作将停止运行并触发java.lang.OutOfMemoryError: Java heap space。
3)内存泄漏。不好编程代码错误将导致你的应用程序不断消耗更多的内存。每次都会将某些对象留在Java堆空间中。久而久之,泄漏的对象会消耗所有可用的Java堆空间。
3 怎么解决和避免呢?
1)分配合理的内存给JVM的堆。
2)但是,在许多情况下,提供更多的Java堆空间将无法解决问题。例如,如果应用程序包含内存泄漏,即使添加更多的堆只会推迟错误。此外,增加Java堆空间的数量也往往会增加GC暂停的时间,从而影响应用程序的吞吐量或延迟。
3)如果希望解决Java堆空间的根本问题而不是掩盖症状,则需要弄清楚代码的哪一部分负责分配最多的内存。换句话说,你需要清楚哪些对象占据堆的大部分空间并想办法优化他们
好了,今天就到这里,第二弹明天见面~