运行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测试时才会发生。
答案 0 :(得分:39)
Junit测试在Eclipse IDE中以不同的vm运行。因此,vm是内存不足而不是Eclipse内存 您可以在测试的运行配置中更改测试vm的设置 您转到运行配置,然后在参数下,您可以设置vm参数。
答案 1 :(得分:16)
继@Thijs Wouters回复,为了解决eclipse中的这个问题,我做了以下几点:
答案 2 :(得分:11)
您的JUnit测试中可能存在内存泄漏。一个常见的问题是:Junit将为中的每个测试方法创建一个TestCase类的新实例并且所有实例变量将保持不变,直到JUnit终止。这意味着:如果你有一个包含50个测试方法的TestCase类和一个在setUp()方法中用1MB对象图初始化的实例变量,那么该TestCase类将需要50MB的堆空间。
编辑:上述问题仅存在于旧版本的JUnit中,我认为它已在JUnit 4中修复。
答案 3 :(得分:2)
我刚刚发布了一个Eclipse插件,它会自动为你设置JUnit启动器的堆大小。你可以从http://code.google.com/p/junitlaunchfixer/得到它。它适用于Eclipse Europa,Ganymede和Galileo。
答案 4 :(得分:1)
我找到了我的问题的解决方案 - 它可以帮助其他人;)当我增加堆大小时,我增加了eclipse应用程序的堆大小,而不是我的程序(我通过eclipse执行)我不得不做什么在运行程序之前修改执行命令。