当前位置: 主页 > JAVA语言

java内存泄漏-java内存泄漏排查

发布时间:2023-02-08 22:24   浏览次数:次   作者:佚名

本文主要介绍java OOM内存泄漏的原因及解决方法。 文章非常详细地介绍了示例代码。 对大家的学习或者工作都有一定的参考学习价值。 需要的朋友可以参考一下。

java内存泄漏_java内存泄漏排查_java内存泄漏原因

java内存泄漏原因_java内存泄漏排查_java内存泄漏

1.什么是OOM

OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,当JVM没有足够的内存为对象分配空间而垃圾回收器没有空间回收时,出现这个错误将被抛出

java内存泄漏原因_java内存泄漏排查_java内存泄漏

2、为什么会出现OOM? 是什么原因?

为什么没有记忆? 有两个原因:

java内存泄漏原因_java内存泄漏_java内存泄漏排查

①分配少:比如虚拟机本身可用的内存(一般在启动时由VM参数指定)太小。

② 应用用的太多了,用完了还不释放,浪费了。 这时候就会造成内存泄漏或者内存溢出

java内存泄漏排查_java内存泄漏_java内存泄漏原因

三、解决方法

① java.lang.OutOfMemoryError: Java heap space ——>java heap memory overflow,这种情况是最常见的,通常是内存泄漏或者heap size设置不当造成的。 对于内存泄漏,需要使用内存监控软件查找程序中泄漏的代码,可以通过虚拟机参数-Xms、-Xmx等修改堆大小。

java内存泄漏_java内存泄漏原因_java内存泄漏排查

② java.lang.OutOfMemoryError: PermGen space ——>java永久代溢出,即方法区溢出,一般发生在大量Class或jsp页面java内存泄漏,或者使用cglib等反射机制时,因为以上情况会产生大量的Class信息存放在方法区。 这种情况可以通过改变方法区的大小来解决java内存泄漏,使用类似-XX:PermSize=64m -XX:MaxPermSize=256m的形式。 另外,过多的常量,尤其是字符串,也会导致方法区溢出。

③ java.lang.StackOverflowError ——> 不会抛出OOM错误,但也是比较常见的Java内存溢出。 JAVA虚拟机栈溢出一般是程序中死循环或深度递归调用引起的。 如果堆栈大小设置得太小,也会发生这种溢出。 堆栈大小可以通过虚拟机参数-Xss来设置。

以上就是今天的内容,希望对大家有所帮助,如果大家在JAVA学习中有什么不懂的可以随时私信我交流!