java.lang.OutOfMemoryError:Java堆问题是在支持或开发复杂的Java EE应用程序时可能会遇到的最复杂的问题之一。
这篇简短的文章将为您提供此JVM HotSpot OutOfMemoryError错误消息的描述,以及在解决该问题之前应如何解决此问题。
有关如何确定要处理的OutOfMemoryError类型的快速帮助指南,请查阅此Blog中的相关文章。 您还将找到有关如何分析JVM堆转储和识别潜在内存泄漏的教程。
java.lang.OutOfMemoryError:Java堆空间–这是什么?
此错误消息通常是在JVM OutOfMemoryError条件后您将看到的中间件服务器日志(Weblogic,WAS,JBoss等)的内容:
·它是从实际的Java HotSpot VM本机代码生成的
·由于Java Heap(年轻一代/旧一代空间)内存分配失败( 由于Java Heap耗尽触发
在OpenJDK项目源代码的下面找到暴露JVM HotSpot实现的代码片段。 该代码显示了哪个条件触发了OutOfMemoryError:Java堆空间条件。
#collectedHeap.inline.hpp
我强烈建议您自己从OpenJDK下载HotSpot VM源代码,以自己的利益和将来的参考。
http://openjdk.java.net/groups/hotspot/
好的,我的应用程序Java Heap已经用尽了……我如何监视和跟踪我的应用程序Java Heap?
正确监视和跟踪Java堆空间(年轻一代和老一代空间)的内存占用量的最简单方法是从HotSpot VM中启用详细GC。 请简单地在JVM启动参数中添加以下参数:
-verbose:gc –XX:+ PrintGCDetails –XX:+ PrintGCTimeStamps –Xloggc:<应用程序路径> /gc.log
然后,您可以按照下面的教程进行操作,以了解如何阅读和分析HotSpot Java Heap占用空间。
http://javaeesupportpatterns.blogspot.com/2011/10/verbosegc-output-tutorial-java-7.html
好的,谢谢,现在我可以看到我有一个很大的Java Heap内存问题…但是如何解决呢?
有多种情况可能导致Java堆耗尽,例如:
·Java堆空间相对于您的应用程序流量和占用空间太小
·Java堆内存泄漏( OldGen空间随着时间的推移而缓慢增长……
·突发线程和/或流氓线程在短时间内等占用大量内存。
在下面找到您可以遵循的高级步骤列表,以进行进一步的故障排除:
·如果尚未完成,请启用详细GC >> -verbose:gc
·分析详细的GC输出并确定每个Java Heap空间(YoungGen和OldGen)的Java Heap的内存占用量
·分析详细的GC输出或使用JConsole之类的工具来确定您的Java Heap是否随时间泄漏。 这可以通过监视HotSpot旧发电机空间来观察。
·监视您的中间件线程并定期生成JVM线程转储,尤其是当观察到Java Heap利用率突然增加时。 线程转储分析将使您能够查明潜在的长时间运行的线程,这些线程可以在很短的时间内在Java堆上分配大量对象。 如果有的话
·在JVM启动参数中添加以下参数:-XX:HeapDumpOnOutOfMemoryError这将使HotSpot VM生成二进制的堆转储(HPROF)格式。 二进制堆转储是关键数据,可用来分析应用程序的内存占用和/或Java堆内存泄漏的源
从分辨率的角度来看,我建议您使用生成的堆转储分析Java堆内存占用量。 可以使用免费的内存分析器工具(MAT)分析二进制堆转储(HPROF格式)。 这将使您了解您的Java应用程序占用空间和/或查明可能的内存泄漏的来源。 一旦清楚了解了这种情况,就可以通过增加Java堆容量(通过–Xms和Xmx参数)或减少应用程序内存占用和/或消除应用程序代码中的内存泄漏来解决问题。 请注意,在中间件服务器代码和JDK中也经常发现内存泄漏。
我已尽一切努力,但我仍在努力查明OutOfMemoryError的来源
不用担心,只需在本文末尾发表评论/问题或直接通过电子邮件发送给我@ phcharbonneau @ hotmail.com 。 我目前提供免费的IT / Java EE咨询。 请在提供您生成的数据(例如指向堆转储的下载链接,线程转储数据,服务器日志等)的同时为您提供问题描述,我们将为您分析问题。
参考: OutOfMemoryError:Java堆空间– Java EE支持模式和Java教程博客中的JCG合作伙伴 Pierre-Hugues Charbonneau 分析和解决方法 。

翻译自: https://www.javacodegeeks.com/2012/05/outofmemoryerror-java-heap-space.html

OutOfMemoryError:Java堆空间–分析和解决方法相关推荐

  1. OOM系列之一:java.lang.OutOfMemoryError: Java堆空间问题详解

    第一篇:java.lang.OutOfMemoryError: Java heap space Java 应用程序只允许使用有限的内存量.此限制是在应用程序启动期间指定的.为了让事情变得更复杂,Jav ...

  2. java应用 cpu占用过高问题分析及解决方法

    主要介绍了java应用cpu占用过高问题分析及解决方法,具有一定参考价值,需要的朋友可以参考下. 使用jstack分析java程序cpu占用率过高的问题 1,使用jps查找出java进程的pid,如3 ...

  3. Java遍历List和Map出现ConcurrentModificationException异常原因分析及解决方法

    Java遍历 List 和 Map 出现 ConcurrentModificationException 异常原因分析及解决方法 一.单线程 异常情况举例 只要抛出出现异常,可以肯定的是代码一定有错误 ...

  4. java堆空间(内存)

    当Java程序开始运行时,JVM会从操作系统获取一些内存.JVM使用这些内存,这些内存的一部分就是堆内存.堆内存通常在存储地址的底层,向上排列.当一个对象通过new关键字或通过其他方式创建后,对象从堆 ...

  5. IBM JDK的Java堆空间的碎片问题

    欢迎大家访问我的个人网站 萌萌的IT人,后续所有的文章都会在此发布 ------------------------------------------------------------------ ...

  6. Java堆空间,本机堆和内存问题

    最近,我在和一个朋友讨论为什么Java进程使用的内存比启动Java进程时设置的最大堆多. 代码创建的所有Java对象都是在Java堆空间内创建的,其大小由-Xmx选项定义. 但是一个Java进程由很多 ...

  7. Java堆空间– JRockit和IBM VM

    本文将为您提供JRockit Java堆空间与HotSpot VM的概述. 它还将为您提供有关JRockit和HotSpot的Oracle未来计划的一些背景知识. Oracle JRockit VM ...

  8. Java堆空间(Heap Space)

    Java 堆空间(Heap Space) 概述 在Java程序中,堆是JVM内存空间中最大的一块,同时我们知道,每个线程都拥有一个虚拟机栈,但是堆不同,Java堆是被所有线程共享的一块内存区域,在虚拟 ...

  9. Segmentation fault段错误出现原因分析及解决方法笔记

    Segmentation fault段错误出现原因分析及解决方法 1.局部变量的大小过大,超过栈分配的空间导致段错误,如double a[500][500], 解决方法:大数据不要放在栈区中,可以考虑 ...

最新文章

  1. shell 读取配置文件
  2. 【Unique Binary Search Trees II】cpp
  3. 不打擦边球、不搞黑线路能不能挣钱, 开始我是忐忑的
  4. java:多态的实现机制
  5. Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布...
  6. UNDO Retntion
  7. 在虚拟机上为红帽7Linux设置中文输入法
  8. OpenGL ES 3D 粒子系统小结
  9. GAN + Video Inpainting的一些思考和相关论文
  10. C语言小知识——uthash使用
  11. 如何看oracle 删除完全,怎么查看以前Oracle卸载干净没?
  12. win10添加开机启动项_Win10+Deepin双系统开启启动项调整
  13. C语言 栈的应用 :火车的调度(软硬座)
  14. 用foobar,ape转mp3
  15. 【Codeforces 760 B Frodo and pillows】+ 二分
  16. 初学Unity3D——材质球
  17. when函数c语言,when表达式
  18. 双硬盘笔记本电脑安装WIN10和Ubuntu双系统(二)
  19. 【数据分析与娱乐八卦】从Python可视化图表中探究王心凌出圈的流量密码
  20. 【软件定义汽车】【硬件篇】特斯拉FSD芯片

热门文章

  1. 基于Apache POI 从xlsx读出数据
  2. ubuntu系统下安装docker并部署Springboot+mysql+redis
  3. POJ3904(BFS算法)
  4. soapui 测试soap_使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第二部分
  5. jdk12源代码文件_JDK 11:轻松取出单文件Java源代码程序
  6. jcmd_程序化JCMD访问
  7. ant 路径_在Ant中显示路径
  8. spring期刊状态_无状态Spring安全性第2部分:无状态认证
  9. apache.camel_Apache Camel 2.14中的更多指标
  10. 分披萨问题_比萨问题–建造者与装饰者