java:OutOfMemoryError:在Idea中运行JUnits时内存不足

时间:2014-06-20 09:04:18

标签: java junit intellij-idea

我正在尝试从IntelliJ Idea中运行JUnits 当我尝试运行Test.java文件时,它给出了一个错误说

  

java:OutOfMemoryError:内存不足

我已经尝试将分配给Idea的内存增加到6GB,但它仍然给我同样的错误,我错过了什么:/

idea64.vmoptions 中增加以下内容并没有帮助。 / opt / idea / bin中的当前vmoption设置为:

-Xms124m
-Xmx2g
-XX:MaxPermSize=2g
-XX:ReservedCodeCacheSize=196m
-XX:+UseCodeCacheFlushing
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true

PS: - 项目有~83k文件,项目总体大小为1.1 GB

遇到以下错误: -

  

信息:使用javac 1.6.0_35编译java源代码   信息:java:系统资源不足。信息:JAVA:   有关详细信息,请参阅以下堆栈跟踪信息:java:at   com.sun.tools.javac.util.Position $ LineMapImpl.build(Position.java:139)   信息:java:at   com.sun.tools.javac.util.Position.makeLineMap(Position.java:63)   信息:java:at   com.sun.tools.javac.parser.Scanner.getLineMap(Scanner.java:1105)   信息:java:at   com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:512)   信息:java:at   com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:550)   信息:java:at   com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:804)   信息:java:at   com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:727)   信息:java:at   com.sun.tools.javac.main.Main.compile(Main.java:353)信息:java:     在com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:115)   信息:java:at   org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:166)   信息:java:at   org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:364)   信息:java:at   org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:276)   信息:java:at   org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:190)   信息:java:at   org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:162)   信息:java:at   org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:992)   信息:java:at   org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:739)   信息:java:at   org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:769)   信息:java:at   org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:702)   信息:java:at   org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:523)   信息:java:at   org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:314)   信息:java:at   org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:179)   信息:java:at   org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:129)   信息:java:at   org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:216)   信息:java:at   org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:111)   信息:java:at   org.jetbrains.jps.cmdline.BuildMain $ MyMessageHandler $ 1.run(BuildMain.java:132)   信息:java:at   org.jetbrains.jps.service.impl.SharedThreadPoolImpl $ 1.run(SharedThreadPoolImpl.java:41)   信息:java:at   java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:441)   信息:java:at   java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:303)   信息:java:at   java.util.concurrent.FutureTask.run(FutureTask.java:138)   信息:java:at   java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:886)   信息:java:at   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:908)   信息:java:at java.lang.Thread.run(Thread.java:662)   信息:java:编译模块' app'   信息:编译在3分钟内完成,出现1个错误和0个警告   19秒信息:1错误信息:0警告错误:java:   OutOfMemoryError:内存不足

IDEA COMPILER SETTINGS

5 个答案:

答案 0 :(得分:21)

根据您的日志,问题出在编译器堆空间中。

转到

Settings -> Compiler -> Build process heap size (MB)

并增加该值。

答案 1 :(得分:20)

Idea在单独的java进程中运行单元测试。

您需要使用

Run -> Edit Configurations...

并将您的-XmxNNNm添加到VM选项。

例如:

-ea -Xmx1024m

" -ea"意味着"启用断言"。

如果您的单元测试无法在1GB的内存中运行,那么您可能会发生内存泄漏。

答案 2 :(得分:1)

就我而言,我的SpringBootTest配置在“启动前”中具有Build(整个项目)gradle任务。这就是我的遗漏。消除这种情况,问题就消失了。

或设置->编译器:增加构建堆大小

答案 3 :(得分:0)

增加堆大小是一种选择。 对我来说(使用Subversion进行源代码版本控制),甚至更容易卸载一些我已经签出且未直接用于测试的模块。这也将加快以后测试的构建过程。

右键单击IntelliJ项目区域中的任何模块->加载/卸载模块->选择一个/一些更大的模块,然后移至“卸载”区域。

答案 4 :(得分:-1)

OOM发生在编译期间,因此您需要增加编译VM: