网站首页 > java教程 正文
这篇文章主要介绍了java OOM内存泄漏原因及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。
一、什么是OOM
OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error
二、为什么会OOM、出现的原因是什么
为什么会没有内存了呢?原因不外乎有两点:
① 分配的少了:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。
② 应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。
三、解决办法
① java.lang.OutOfMemoryError: Java heap space ——>java堆内存溢出,此种情况最常见,一般由于内存泄露或者堆的大小设置不当引起。对于内存泄露,需要通过内存监控软件查找程序中的泄露代码,而堆大小可以通过虚拟机参数-Xms,-Xmx等修改。
② java.lang.OutOfMemoryError: PermGen space ——>java永久代溢出,即方法区溢出了,一般出现于大量Class或者jsp页面,或者采用cglib等反射机制的情况,因为上述情况会产生大量的Class信息存储于方法区。此种情况可以通过更改方法区的大小来解决,使用类似-XX:PermSize=64m -XX:MaxPermSize=256m的形式修改。另外,过多的常量尤其是字符串也会导致方法区溢出。
③ java.lang.StackOverflowError ——> 不会抛OOM error,但也是比较常见的Java内存溢出。JAVA虚拟机栈溢出,一般是由于程序中存在死循环或者深度递归调用造成的,栈大小设置太小也会出现此种溢出。可以通过虚拟机参数-Xss来设置栈的大小。
以上就是今天的内容,希望对大家有所帮助,在JAVA学习上有什么不懂的可以随时私信我交流!
本文转载至——脚本之家,如有侵权请联系立删!
- 上一篇: 高级Java开发 面试必备的JVM知识点(一)
- 下一篇: Java中字符串填充零和去零的常用方法
猜你喜欢
- 2024-10-26 Java中字符串填充零和去零的常用方法
- 2024-10-26 高级Java开发 面试必备的JVM知识点(一)
- 2024-10-26 解决ServletException: java.lang.NoSuchMethodError
- 2024-10-26 干货:日常Java报错整理(java的错误异常怎么处理)
- 2024-10-26 SpringBoot执行jar报错java.lang.OutOfMemoryError_指定内存大小
- 2024-10-26 Springboot2.0学习6 使用配置文件
- 2024-10-26 Java类型之间的转换(java类型之间的转换是什么)
- 2024-10-26 mybatis中报出java.lang.UnsupportedOperationException错误
- 2024-10-26 JavaEE 项目常见错误汇总(进一步补充)
- 2024-10-26 Java异常的面试问题及答案-Part 2
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)