30

在运行 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 测试时发生。

4

5 回答 5

42

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

于 2009-03-25T11:23:24.957 回答
20

继@Thijs Wouters 响应之后,为了在 Eclipse 中解决此问题,我执行了以下操作:

  • 在 JUnit 下添加了新的运行配置(运行>运行配置>JUnit>新建)
  • 在参数选项卡中,将 VM 参数设置为“-Xms64m -Xmx256m”或更高(如果需要)
于 2010-09-17T10:29:01.653 回答
15

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

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

于 2009-03-25T13:05:28.987 回答
2

我刚刚发布了一个 Eclipse 插件,它会自动为您设置 JUnit 启动器的堆大小。您可以从http://code.google.com/p/junitlaunchfixer/获得它。它适用于 Eclipse Europa、Ganymede 和 Galileo。

于 2009-09-22T22:11:16.307 回答
1

我找到了我的问题的解决方案 - 它可能对其他人有所帮助;)当我增加堆大小时,我增加了 eclipse 应用程序的堆大小,而不是我的程序(我通过 eclipse 执行)我必须做的是修改在运行我的程序之前执行命令。

于 2010-05-27T07:10:49.777 回答