关于java.lang.OutOfMemoryError的一例

在使用InsECTJ进行性能测试时遇到大量测试案例失败的问题,经过排查发现是由ArrayList未清空引起的。进一步调试中发现特定测试案例仍失败,原因是-Xmx设置过小导致内存溢出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先是昨天在基于InsECTJ做profiling,然后发现绝大多数的test case都fail了,与此同时产生的trace文件的大小都是37,336,474字节(内含7,634,068行,每行一个字符),觉得比较奇怪:
一方面,这一组test case应该只有2个fail,其它全部pass。另一方面,当然是所有fail的trace文件都是同样的大小。

今天回来大概看了一下代码,发现是一个比较低级的bug造成的:用于存放当前test case的trace的ArrayList没清空。于是改了改代码,再运行,发现绝大多数trace看上去都是正确的,但是还是有一个test case本应该是pass,而它却仍然fail,并且trace文件大小还是37,336,474字节。

于是乎...,各种猥琐的猜测涌上心头,比如ArrayList有没有长度限制之类。后来大概Google了一下,发现可能是因为-Xmx设置得太小,在运行的时候out of memory了。于是在test case的listener里面加了点打印语句,发现果然如此。(囧...)

之前没发现这个Error,可能是因为程序是通过ant和JUnit的test runner来运行的,导致Error的stack trace没有被打印出来(具体被弄到哪里去了,暂时没空去琢磨了 :oops: )。在这里就暂时记录一下吧,以备后用 :idea:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值