内存不足而没有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描述:课表查询没有课表结果,点进去当前周…

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

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

微信小程序下拉框

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

CSS 高度(css height)

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

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

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

python学习日记(匿名函数)

匿名函数 简介 匿名函数&#xff1a;为了解决那些功能很简单的需求而设计的一句话函数。 python 使用 lambda 来创建匿名函数。 所谓匿名&#xff0c;意即不再使用 def 语句这样标准的形式定义一个函数。 1 lambda 只是一个表达式&#xff0c;函数体比 def 简单很多。 2 lambda…

列表相关元素及其属性

HTML5保留了如下几个列表相关元素&#xff1a;无序列表<ul>、有序列表<ol>、自定义列表<dl> 1、<ul>&#xff1a;定义无序列表&#xff0c;可以指定id、style、class等属性&#xff0c;还可以指定onclick等事件属性。 2、<ol>&#xff1a;定义有…

DB 数据同步到数据仓库的架构与实践

背景 在数据仓库建模中&#xff0c;未经任何加工处理的原始业务层数据&#xff0c;我们称之为ODS&#xff08;Operational Data Store&#xff09;数据。在互联网企业中&#xff0c;常见的ODS数据有业务日志数据&#xff08;Log&#xff09;和业务DB数据&#xff08;DB&#xf…

java log.error_Logger.error打印错误异常的详细堆栈信息

一、问题场景使用Logger.error方法时只能打印出异常类型&#xff0c;无法打印出详细的堆栈信息&#xff0c;使得定位问题变得困难和不方便。二、先放出结论Logger类下有多个不同的error方法&#xff0c;根据传入参数的个数及类型的不同&#xff0c;自动选择不同的重载方法。当e…

笔记本电脑怎么清理灰尘_手机声音越用越小怎么办?一段黑科技音波就能清理扬声器灰尘...

大家好&#xff0c;欢迎收看科技狐&#xff0c;我是小狐。我们都知道&#xff0c;随着手机的使用时间越来越长&#xff0c;手机扬声器里面会积赞一些灰尘。因此手机的声音就会变得越来越小。有时候连电话铃声都听不清楚&#xff0c;说实话我就是这个样子&#xff0c;为此我困扰…

Java方法中的参数太多,第8部分:工具

在我的系列文章的前七篇文章中&#xff0c;有关处理Java方法中期望的参数过多的内容集中在减少方法或构造函数期望的参数数量的替代方法上。 在本系列的第八篇文章中&#xff0c;我将介绍一些工具&#xff0c;这些工具可帮助您确定可能存在过多参数的情况&#xff0c;并在出现这…

predict函数 R_学习|R语言做机器学习的常用函数总结

预测函数&#xff1a;predict() type"prob"判别该量度的昆虫归类为A、B和C的概率&#xff1b;type"response"&#xff1a;判别该量度的昆虫的类别&#xff1b;预测分类的概率的函数predict(…, type)参数type&#xff1a;R语音里面不同模型&#xff0c;参数…

微信小程序:动画(Animation)

简单总结一下微信动画的实现及执行步骤。 一、实现方式 官方文档是这样说的&#xff1a;①创建一个动画实例 animation。②调用实例的方法来描述动画。③最后通过动画实例的 export 方法导出动画数据传递给组件的 animation 属性。 因为小程序是数据驱动的&#xff0c;给这句话…

SSM+solr 通过商品搜索学习solr的简单使用

学习了一下https://github.com/TyCoding/ssm-redis-solr这个github上的solr搜索功能&#xff0c;现在来记录一下。 我的理解就是solr有点类似于数据库&#xff0c;但它是有索引的数据库&#xff0c;按很多字段建立索引&#xff0c;可能是b树或者散列索引&#xff0c;然后就能够…

可以使用中文作为变量名_次氯酸可以作为伤口消毒使用吗?

次氯酸可以作为伤口消毒使用吗&#xff1f;次氯酸在经过2020年的洗礼&#xff0c;已然成为常态化&#xff0c;它对于人体是否有害&#xff0c;也是人们关注的焦点。对于那些还不太了解次氯酸的群体做一下简短科普。什么是次氯酸&#xff1f;次氯酸&#xff08;HCIO&#xff09;…

tomcat启动java项目_Java web项目启动Tomcat报错解决方案

点击运行项目时显示 A Java Exception has occurred.Starting Tomcat v9.0 Server at localhost has oncountered a problem.Server Tomcat v9.0 Server at localhost failed tostart.并显示以下两个弹框同时控制台报错org.apache.catalina.startup.Bootstraporg.apache.catali…

matlab 从 excel读取 日期_MATLAB批量修改文件名和选择性复制/剪切文件

今天解决的问题&#xff1a;1、如何利用MATLAB批量修改文件名&#xff1f;(前面写过一次bat命令法&#xff0c;这个应该也算一次改进&#xff0c;程序的初衷是想将Smartsolo导出的文件名批量修改为以炮点桩号为文件名)2、如何利用MATLAB选择性批量复制/剪切文件&#xff1f;(程…

CODE[VS] 1860 最大数 1998年NOIP全国联赛提高组

题目描述 Description设有n个正整数&#xff08;n≤20&#xff09;&#xff0c;将它们联接成一排&#xff0c;组成一个最大的多位整数。 输入描述 Input Description第一行一个正整数n。 第二行n个正整数&#xff0c;空格隔开。 输出描述 Output Description连接成的多位数。…

您基于JEE的Web项目的结构是什么?

在本文中&#xff0c;我将主要与JSF讨论基于Web的项目的各种组织结构。 开始新项目时&#xff0c;首先想到的是如何组织Java包&#xff1f; 想象一下&#xff0c;您开发了一个基于Web的用户和组管理系统。 很长时间以来&#xff0c;我使用以下Java包结构来将Bean类与模型类分开…