这实际上是最初发布于2010年的帖子的转世。 昨天,当听到我们的工程师咒骂一个特别令人讨厌的错误时,闪回发生了。 当诅咒停止时,我走过去核实我的怀疑。 瞧,我是正确的–情绪波动是由应用程序用尽了堆空间导致的,但死于没有通常的OutOfMemoryError症状。

因此,让我通过三年前我第一次遇到的相同代码示例来说明缺少OutOfMemoryError的情况。 那时我使用的是Windows XP,安装了2010年中期的JDK 6。

我在玩的是Plumbr的早期发行版,该发行版应该是从应用程序中发现内存泄漏的。(编辑:那时,它除了崩溃JDK之外几乎没有做任何事情)。 为了验证这一点,我写了一个小片段,我认为这对于泄漏发现是一个很好的测试用例(编辑:实际上不是)。 我能够创建并启动以下命令:

class Leak {  static List list = new ArrayList();  public static void main(String[] args) {  for (int i = 0; i >= 0 ;i++) {  list.add(i);  }  System.out.println("I will either reach here or die trying");  }
}

对于marketoid来说相当不错,是吗? 但是您认为运行显示在我的命令提示符下的代码是什么:

选项A:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:2760)at java.util.Arrays.copyOf(Arrays.java:2734)at java.util.ArrayList.ensureCapacity(ArrayList.java:167)at java.util.ArrayList.add(ArrayList.java:351)at Leak.main(Leak.java:6)

选项B:

I will either reach here or die trying

好吧,正如我发现的那样,它什么都不会打印出来,所以我几乎只能盯着空的命令提示符。

由于距离我上一次真正的Java开发经验只有两年,之后才被降级为管理人员,所以我没有时间进行故障排除。 因此,我将样本带给了铁杆Java黑客,这些黑客后来被称为Zeroturnaround的创始人。 在过去的十分钟中,我设法使它们看上去也眼花azz乱,在它出现之前-内存的分配方式使得没有空间可以创建new OutOfMemoryError()

如果使用2010年中的JDK版本在Windows XP上以64MB堆(默认)执行上述操作,则会看到无提示失败:

C:\work\snippets\leak java -Xmx64m Leak
C:\work\snippets\leak

但是,如果您稍微增加(实际上可以修改)堆大小,则会遇到更熟悉的情况:

C:\work\snippets\leak java -Xmx65m Leak
Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:2760)at java.util.Arrays.copyOf(Arrays.java:2734)at java.util.ArrayList.ensureCapacity(ArrayList.java:167)at java.util.ArrayList.add(ArrayList.java:351)at Leak.main(Leak.java:6)
C:\work\snippets\leak

故事的道德启示? 我只能建议升级到一个更现代的版本–不管我尝试了哪种配置,我都无法使用今天在Mac上拥有的JDK 7版本来重新创建这种情况。 但是,查看有关流行的Java运行时配置的统计信息,您会发现可追溯到2010年之前版本的JDK部署数量惊人,这意味着问题仍然存在,迫使开发人员疯狂地通宵达旦,试图找出源代码。这个问题没有来自堆栈跟踪的任何提示来支持它们。

无论如何,以我对JDK 6内部的广泛知识支持工程团队,我继续前进,并从我曾经贡献过的被人们遗忘的博客中恢复了这篇帖子。

参考: Plumbr博客的 JCG合作伙伴 IvoMägi 指出,内存用完了而没有OutOfMemoryError 。

翻译自: https://www.javacodegeeks.com/2013/10/running-out-of-memory-without-the-outofmemoryerror.html

内存不足而没有OutOfMemoryError相关推荐

  1. Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的解决办法

    原文:http://cheen.iteye.com/blog/1687420 Tomcat启动时报如下错误:       java.lang.OutOfMemoryError: PermGen spa ...

  2. myEclipse开发内存溢出解决办法myEclipse调整jvm内存大小java.lang.OutOfMemoryError: PermGen space及其解决方法...

    摘要: tomcat部署多个项目后,启动tomcat正常,访问项目时却会出现该错误 在网上查了查又试了好几次,才解决,将解决方法记录下来,以方便以后查看或让遇到同样问题的朋友有个参考 PermGen ...

  3. 内存不足 java.lang.OutOfMemoryError: Java heap space

    问题描述 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 解决方案[转] 一直都知道可 ...

  4. Struts2中我所遇到的内存溢出(java.lang.OutOfMemoryError)异常错误介绍

    1.在我以前写得关于Struts2的文章中,有时候往往会报一些经常出现的错误,今天又出现了,所以特此来介绍一下,并如何解决这种错误. 2.在我们部署项目到Tomcat服务器后,开启Tomcat服务器, ...

  5. kafka内存溢出分析:OutOfMemoryError

    线上Kafka问题分析:OutOfMemoryError 前言: 最近在线上遇到个奇怪的问题,具体的情景是:由于客户有相应的需求,我们需要提前在程序中判断Kafka集群是否可用,于是我们使用了Kafk ...

  6. java缓存内存泄漏_记一次mybaits缓存导致的内存溢出 java.lang.OutOfMemoryError: Java heap space...

    先贴一下错误截图 org.springframework.web.util.NestedServletException: Handler dispatch failed; nested except ...

  7. tomcat7 内存溢出 java.lang.OutOfMemoryError: Java heap space

    在{tomcat7_home}bin/catalina.sh最上面添加: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=128M -XX ...

  8. 应用jacob组件造成的内存溢出解决方案(java.lang.OutOfMemoryError: Java heap space)

    http://www.educity.cn/wenda/351088.html 使用jacob组件造成的内存溢出解决方案(java.lang.OutOfMemoryError: Java heap s ...

  9. java内存溢出模拟_模拟实战排查堆内存溢出(java.lang.OutOfMemoryError: Java heap space)问题...

    前言: 模拟实战中排查堆内存溢出(java.lang.OutOfMemoryError: Java heap space)的问题. 堆内存溢出的原因:一般都是创建了大量的对象,这些对象一直被引用着,无 ...

最新文章

  1. python图标-python实现的简版iconv
  2. NoSQL有了Android版本
  3. stm32 IAP在线升级的个人经验以及实现方法
  4. boost::container实现多态的flat_set
  5. java使用http代理访问服务器
  6. 三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程)
  7. 【李宏毅NLP笔记】Tacotron 可以从哪些方面改进
  8. [技术帖] js中,双引号,引发的问题
  9. 【OpenCV学习笔记】【编程实例】六 (霍夫圆检测续)
  10. 区块链 single共识
  11. 用java画工作流流程图,java生成流程图
  12. 计算机三级数据库要安装什么软件,计算机三级数据库技术题库app
  13. 还来得及,快来拯救网易相册上的老照片吧!
  14. 唐福林《新浪微博开放平台中的Redis实践》演讲视频
  15. 向日葵android客户端,向日葵安卓3.1客户端教程
  16. VB编程:UCase转大写,LCase转小写-4
  17. 校招----青颖飞帆二面面经
  18. 汇编语言实验5:循环结构程序设计
  19. 真太极之只言片语 (续)
  20. 数据工程学建设思考与实践

热门文章

  1. ibatis(2)ibatis是什么
  2. 使用vo注释做一个poi导出功能
  3. posman mocks_使用Mocks进行需求驱动的软件开发
  4. java创建和销毁一个对象_有效的Java –创建和销毁对象
  5. hibernate删除记录_Hibernate记录:常见问题的提示和解决方案
  6. dynamodb容器使用_使用DynamoDBMapper插入DynamoDB项目
  7. cassandra_Spring Boot Cassandra的第一步
  8. maven 可执行 jar_Maven提示:有关可执行jar的所有信息
  9. 为什么在生产中进行硒自动化测试对于您的下一个版本至关重要?
  10. 构建Spring微服务并对其进行Dockerize生产