为什么堆空间仅在运行JUnit测试时耗尽?

sma*_*uel 25 java eclipse junit out-of-memory

运行JUnit测试时,我似乎总是遇到这个错误:

eclipse outOfMemoryError:堆空间

我用JConsole监视Eclipse,堆内存峰值大约为150MB.我已将堆内存设置为1GB.

我在启动Eclipse时使用以下参数:

-vm "C:\Program Files\Java\jre1.5.0_08\bin\javaw.exe" -vmargs -Xmx1024M
-XX:MaxPermSize=128M -Dcom.sun.management.jmxremote.port=8999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

有谁知道可能导致这个问题的原因?它只在运行JUnit测试时发生.

Thi*_*ers 40

Junit测试在Eclipse IDE中以不同的vm运行.所以vm是内存不足而不是Eclipse内存.
您可以在测试的运行配置中更改测试vm的设置.
您转到运行配置,然后在参数下,您可以设置vm参数.


Nig*_*mas 17

继@Thijs Wouters回复,为了解决eclipse中的这个问题,我做了以下几点:

  • 在JUnit下添加了新的运行配置(运行>运行配置> JUnit>新建)
  • 在参数选项卡中,如果需要,将VM参数设置为"-Xms64m -Xmx256m"或更高


Mic*_*rdt 12

您的JUnit测试中可能存在内存泄漏.一个常见的问题是:Junit将为其中的每个测试方法创建一个TestCase类的新实例.所有实例变量将保持不变直到JUnit终止.这意味着:如果你有一个带有50个测试方法的TestCase类和一个在setUp()方法中用1MB对象图初始化的实例变量,那么该TestCase类将需要50MB的堆空间.

编辑:上面描述的问题仅存在于旧版本的JUnit中,我认为它已在JUnit 4中修复.