内存不足而没有OutOfMemoryError

这实际上是最初发布于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开发经验只有两年,之后才被降级为管理人员,所以我没有时间进行故障排除。 因此,我将样本带给了铁杆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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能第二星期总结-------纵里寻它千百度

2018-07-28 第二周: 此时此刻我怀着无比沉重的心情在这里做一周的学习检讨工作 这星期依此就开始讲到了函数,话说函数可是python里面的钟头戏,不仅可以节约代码,还可以把代码重复使用,只要后面轻轻松松就可以搞定啦&am…

个人作业——软件产品案例分析

个人作业——软件产品案例分析 第一部分 调研,评测 评测: 第一次上手体验 第一眼看上去功能很全面,但是到点开来发现功能大部分没有实现,体验不太好。 缺陷Bug情况 课表查询 bug描述:课表查询没有课表结果,点进去当前周…

java hashtable put_Java Hashtable put()方法与示例

哈希表类put()方法put()方法在java.util包中可用。put()方法用于将给定的键元素(key_ele)放入给定的值元素(val_ele)。put()方法是一个非静态方法,只能通过类对象访问,如果尝试使用类名访问该方法,则会收到错误消息。put()方法在放置键/值对时…

HTML之表单

表单&#xff1a; 表单是一个包含表单元素的区域。 表单元素是允许用户在表单中输入内容,比如&#xff1a;文本域(textarea)、下拉列表、单选框(radio-buttons)、复选框(checkboxes)等等。 表单使用表单标签 <form> 来设置: <form> . input 元素 . </form>…

将AspectJ与NetBeans平台开发集成

您是否正在使用NetBeans平台开发项目&#xff1f; 您愿意使用AspectJ来使用AOP吗&#xff1f; 您不知道如何将AspectJ编译器集成到NetBeans的内部版本中&#xff1f; 如果您的回答是“是”&#xff0c;则此帖子适合您。 我决定写这篇技术文章&#xff0c;是因为我在寻找该解决…

Linux CentOS 6.5 使用自带jdk修改环境变量

来源:https://www.cnblogs.com/zhenxiqia/p/9049290.html Linux CentOS 6.5 使用自带jdk修改环境变量 首先声明&#xff0c;默认jdk指我们安装完CentOS后系统自带jdk&#xff0c;自己下载安装的jdk只需要下载&#xff0c;解压即可&#xff0c;之后步骤与此文一致 1.查看我们默认…

第二阶段冲刺10

基本的代码已经编写完成&#xff0c;游戏的功能已经完善&#xff0c;基本上已经是一个合格的软件了&#xff0c;这次为期10天的冲刺很充实&#xff0c;我们切实的完善了软件&#xff0c;学会了很多&#xff0c;也可以更好的融入团队中了。团结就是力量&#xff0c;十天前我们还…

java如何找重复数字_Java如何找出数组中重复的数字

题目描述&#xff1a;找出数组中重复的数字&#xff0c;具体内容如下在一个长度为n的数组里的所有数字都在 0~n-1的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字是重复的&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如&…

页面中添加锚点的几种方式

本文档创建时间:2018-11-7 15:52:28 方法一,使用a标签添加 通过设置a标签的href属性,跳转到页面中指定id标签的位置a标签的href属性值前要增加#来作为标识,表示是在当前页面的内部跳转 简单的案例: 1 <html>2 <head></head>3 <body>4 <!--设置锚点…

休眠事实:有利于双向集vs列表

Hibernate是一个很棒的ORM工具&#xff0c;它极大地简化了开发&#xff0c;但是如果您想正确地使用它&#xff0c;则有很多陷阱。 在大中型项目中&#xff0c;具有双向父子关联非常常见&#xff0c;这使我们能够浏览给定关系的两端。 在控制关联的持久/合并部分时&#xff0c…

ue正则

1 删除含某些内容的行,例:含有PTTAddress 使用替换功能&#xff0c;勾选正则表达式(Regular Expressions)&#xff0c;查找为%*PTTAddress*^p&#xff0c;替换为空 2.替换大写字母为_大写字母 替换功能&#xff0c;查找为 ^([A-Z]^)&#xff0c;替换为 _^1转载于:https://www.c…

20 存储过程

一、存储过程的定义 存储过程是存储在数据库目录中的一坨的声明性SQL语句。 Java&#xff0c;Python&#xff0c;PHP等应用程序可以调用存储过程。 MySQL是最受欢迎的开源RDBMS&#xff0c;被社区和企业广泛使用。 然而&#xff0c;在它发布的第一个十年期间&#xff0c;它不支…

微信小程序下拉框

微信小程序组件里没有下拉框&#xff0c;正好要用到&#xff0c;记下来以后参考 wxml代码 <view classtop><view classtop-text> 选择接收班级</view><!-- 下拉框 --><view classtop-selected bindtapbindShowMsg><text>{{grade_name}}&l…

int最大值java_Java 中一个int型数组的求最大值最小值 | 学步园

小友今日看单元测试&#xff0c;发现的一个测试用例的代码。而测试的是某个类的最大值&#xff0c;最小值方法。在此把测试类发上来。保留此地&#xff0c;如有人对此有兴趣&#xff0c;看以看下。闲话少说&#xff1a;public class MaxMinTool {public static int getMax(int[…

使用Maven实施自定义JSF 2.0组件

前一段时间&#xff0c;我编写了自己的定制JSF组件。 但是在那个时候&#xff0c;JSF 1.0仍然是最新的&#xff0c;并且该项目没有使用maven作为构建系统。 因此&#xff0c;我一直想用maven编写一个自定义JSF2组件。 因此&#xff0c;让我们开始&#xff1a; 首先&#xff0c…

python2.7.5-虚拟环境搭建

virtualenv可以搭建虚拟且独立的python运行环境, 使得单个项目的运行环境与其它项目独立起来. virtualenv本质上是个python包, 使用pip安装: pip install virtualenv 在新建工作目录下创建虚拟环境: ~$virtualenv TestEnv 默认情况下, 虚拟环境中不包括系统的site-packages, 若…

CSS 高度(css height)

DIV CSS height高度知识教程篇 DIV CSS高度简介这里的CSS高度是指通过CSS来控制设置对象的高度。使用CSS属性单词height。单位可以使用PX&#xff0c;em等常用使用PX&#xff08;像素&#xff09;为html单位。 height高度目录height高度语法高度用法html原始高度设置css高度hei…

fst java_java快速序列化库FST

FST fast-serialization 是重新实现的 Java 快速对象序列化的开发包。序列化速度更快(2-10倍)、体积更小&#xff0c;而且兼容 JDK 原生的序列化。要求 JDK 1.7 支持。Maven&#xff1a;12 de.ruedigermoeller3 fst4 1.365示例代码&#xff1a;01// ! reuse this Object, it ca…

HOW-TO:带有Spring MVC的Tomcat中的自定义错误页面

默认的Tomcat错误页面看起来很可怕。 此外&#xff0c;它们可能会公开有价值的信息&#xff0c;包括服务器版本和异常堆栈跟踪。 Servlet规范提供了一种通过web.xml配置异常行为的方法。 可以配置对特定Java异常的响应&#xff0c;也可以配置对选定的Http响应代码的响应。 err…

第三代酷睿i3处理器_轻薄本CPU谁更强?英特尔21款低功耗处理器大排行!

点击上电脑爱好者关注我们对智能手机而言&#xff0c;其搭载的SoC是衡量性能强弱的唯一准绳&#xff0c;因为一颗SoC芯片内就集成了CPU(处理器)、GPU(显卡&#xff0c;包括集成的核显和独显)、ISP(影像处理器)和Modem(调制解调器)等模块&#xff0c;只要掌握了SoC的强弱关系&am…