java内存泄漏-java内存泄漏排查
本文主要介绍java OOM内存泄漏的原因及解决方法。 文章非常详细地介绍了示例代码。 对大家的学习或者工作都有一定的参考学习价值。 需要的朋友可以参考一下。
1.什么是OOM
OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,当JVM没有足够的内存为对象分配空间而垃圾回收器没有空间回收时,出现这个错误将被抛出
2、为什么会出现OOM? 是什么原因?
为什么没有记忆? 有两个原因:
①分配少:比如虚拟机本身可用的内存(一般在启动时由VM参数指定)太小。
② 应用用的太多了,用完了还不释放,浪费了。 这时候就会造成内存泄漏或者内存溢出。
三、解决方法
① java.lang.OutOfMemoryError: Java heap space ——>java heap memory overflow,这种情况是最常见的,通常是内存泄漏或者heap size设置不当造成的。 对于内存泄漏,需要使用内存监控软件查找程序中泄漏的代码,可以通过虚拟机参数-Xms、-Xmx等修改堆大小。
② 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学习中有什么不懂的可以随时私信我交流!