使用Java那么久,在此总结一下Java中常见的内存溢出问题以及对应的解决思路

堆溢出

报错信息

java.lang.OutOfMemoryError: Java heap space

报错原因

堆中(新生代和老年代)无法继续分配对象了;

某些对象的引用长期被持有没有被释放,垃圾回收器无法回收;

使用了大量的 Finalizer 对象,这些对象并不在 GC 的回收周期内。

解决办法

将堆内存 dump 下来,使用 MAT 分析一下,解决内存泄漏;

如果没有内存泄漏,使用 -Xmx 增大堆内存;

如果有自定义的 Finalizable 对象,考虑其存在的必要性。

GC超载溢出

报错信息

java.lang.OutOfMemoryError:GC overhead limit exceeded

报错原因

垃圾回收器超过98%的时间用来做垃圾回收,但回收了不到2%的堆内存。

解决办法

添加 -XX:-UseGCOverheadLimit 这个启动参数去掉报警,但这只是一种掩耳盗铃的方式,一般出现 GC overhead limit exceeded 说明离真正的 OOM 也不远了;

将堆内存 dump 下来,使用 MAT 分析一下,解决内存泄漏;

如果没有内存泄漏,使用 -Xmx 增大堆内存;

永久代/元空间溢出

报错信息

java.lang.OutOfMemoryError: PermGen space 或者

java.lang.OutOfMemoryError: Metaspace(Java8及以上)

报错原因

永久代是 HotSot 虚拟机对 方法区的具体实现,存放了已被虚拟机加载的类信息、常量、静态变量、JIT编译后的代码等。需要注意的是,在Java8后,永久代有了一个新名字:元空间,元空间使用的是本地内存。永久代里存在的信息也有了若干变化:

字符串常量由永久代转移到堆中;

和永久代相关的JVM参数已移除。

出现永久代或元空间的溢出的原因可能有如下几种:

有频繁的常量池操作(eg. String.intern),这种情况只适用于Java7之前应用;

加载了大量的类信息,且没有及时卸载;

应用部署完后没有重启。

解决办法

永久代/元空间 溢出的原因比较简单,解决方法有如下几种:

Java8前的应用:使用 -XX:MaxPermSize 增加永久代的大小();

Java8及以后的应用:如果设置了 -XX:MaxMetaSpaceSize,调整其大小或者移除掉该参数。

尝试重启JVM。

方法栈溢出

报错信息

java.lang.OutOfMemoryError : unable to create new native Thread

报错原因

虚拟机在拓展栈空间时,无法申请到足够的内存空间。一般出现在内存空间过小,但是又创建了大量的线程的场景。

解决办法

通过-Xss降低的每个线程栈大小的容量,注意-Xms,-Xmx的影响;

线程总数也受到系统空闲内存和操作系统的限制,检查是否该系统下有此限制:

/proc/sys/kernel/pid_max,

/proc/sys/kernel/thread-max,

max_user_process(ulimit -u),

/proc/sys/vm/max_map_count

数组分配溢出

报错信息

java.lang.OutOfMemoryError: Requested array size exceeds VM limit

这种情况一般是由于不合理的数组分配请求导致的,消除代码逻辑错误或者调整堆大小。

Swap分区溢出

报错信息

java.lang.OutOfMemoryError: Out of swap space

这种情况一般是操作系统导致的,可能的原因有:

swap 分区大小分配不足;

机器上其他进程消耗了所有的内存。

本地方法溢出

报错信息

java.lang.OutOfMemoryError: stack_trace_with_native_method

这种情况表明,本地方法在运行时出现了内存分配失败。和java.lang.OutOfMemoryError : unable to create new native Thread 保存不同,方法栈溢出出现在 JVM 的代码层面,而本地方法溢出发生在JNI代码或本地方法处。

java数组内存溢出_Java内存溢出问题总结相关推荐

  1. java 内存溢出 内存泄露_java 内存泄露、内存溢出、内存不足

    内存泄露 什么是内存泄露? 在维基百科上的定义如图: 中文意思就是一个对象在内存中,而程序无法获取此对象,于是不能释放该对象所占用的内存. 百度百科上的定义如图: OWASP上的定义: 开发者无法释放 ...

  2. java 如何排查内存溢出_java 内存溢出排查

    测试代码,如下示例: import java.util.ArrayList; import java.util.List; /** * @Description 测试内存溢出, 启动时设置参数,最大堆 ...

  3. java long 内存溢出_JAVA内存区域与内存溢出异常

    JAVA内存区域与内存溢出异常 一 Java内存区域 Java虚拟机在执行java程序的过程中会把它管理的内存划分为若干个不同的数据区域,Java虚拟机所管理的内存包含以下几个运行时数据区域. 1.程 ...

  4. docker java 内存溢出_java内存溢出

    与此问题类似jmeter Error occurred during initialization of VM Could not reserve enough space_萧木易的博客-CSDN博客 ...

  5. java 内存 溢出_java内存溢出的几种原因和解决办法是什么?

    java内存溢出的几种原因和解决办法是什么? java内存溢出的几种原因和解决办法是: 第一类内存溢出,也是大家认为最多,第一反应认为是的内存溢出,就是堆栈溢出: 那什么样的情况就是堆栈溢出呢?当你看 ...

  6. java什么时候可能产生内存溢出_JAVA内存泄露和内存溢出

    1)概念: 内存溢出:指在指定大小的内存空间,写入了超出大小的数据,从而导致了内存溢出. 内存溢出:指程序运行过程中无法申请到足够的内存而导致的一种错误. 内存溢出通常发生于OLD段或Perm段垃圾回 ...

  7. java list 内存溢出_java内存溢出的2种情况

    java程序员在面试经常被问到内存om之后如何处理,但是实际在工作中遇到此类问题的情况却又非常少. 进过自己一番总结内存溢出主要分为2种: 一.堆内存溢出 OutOfMemoryError 从jvm的 ...

  8. java 内存溢出和内存泄漏_JAVA内存泄漏和内存溢出的区别

    内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出. ...

  9. JAVA 继承内存模型_Java内存模型

    JVM的组成 类加载器(classloader) 执行引擎(execution engine) 运行时数据区域(runtime data area) 对于Java程序员来说,在虚拟机自动内存管理机制下 ...

最新文章

  1. ASP.NET MVC 表单提交教程
  2. 洛谷P3688/uoj#291. [ZJOI2017]树状数组
  3. arguments转换为数组格式
  4. 每日一皮:临近截止日期, 产品经理就这样看着我...
  5. dell主板40针开机针脚_电脑主板各种接口的介绍最新版
  6. java虚拟机通俗_JAVA虚拟机的通俗解释
  7. 字节是微型计算机中存储容量的度量单位,微型计算机内存容量的基本计量单位...
  8. 乐玩插件和大漠插件哪个好_用好这5款Chrome插件,大幅提升你的生产力
  9. mysql调优_MYSQL企业常用架构与调优经验分享
  10. C++头文件,预处理详解
  11. vscode android调试,使用VsCode开发调试React Native笔记
  12. 数据分析中会常犯哪些错误,如何解决? 五
  13. (转载)通俗易懂讲解TCP流量控制机制(一看就懂的那种)
  14. 员工自动离职可以申请经济补偿吗
  15. 基于Springboot的个人健康监控管理系统 毕业论文+项目源码、
  16. VB.net下使用开源免费三维控件Anycad的应用实例分享
  17. Apache DolphinSchedulerShenYu(Incubating)联合 Meetup,暖春 3 月与你相约!
  18. 基于微信小程序的智慧党史系统源码【包调试】
  19. 为什么要学习平面设计的几个理由
  20. ios Objective-c 字体样式大全(UIFont 可设置的)

热门文章

  1. 前后端分离 -- 深入浅出 Spring Boot + Vue + ElementUI 实现相册管理系统【文件上传 分页 】 文件上传也不过如此~
  2. 大旗网缘何接力传统论坛之殇?
  3. Intellij 查看所有断点
  4. 如何开展网安XX行动防护工作
  5. ShaderGraph——全息效果
  6. 安川机器人程序还原_安川机器人报错代码:功能概要和程序数据简易修复方法...
  7. 护理业务查房PPT模板-优页文档
  8. Unity实现第三人称角色转向摄像机朝向的方向
  9. 分布式场景实战第七节 微服务场景实战
  10. 世界五百强的人力资源面试--很精彩