Недавно я сделал очень много изменений кода (из-за обновления сторонней библиотеки) в моем проекте java. В результате моя задача компиляции муравьев вышла из космоса (пустое пространство - старое поколение).Как найти утечку памяти в javac-задаче
Раньше я использовал 1G Xmx, теперь я должен использовать 2G для успешной компиляции. Я профилировал процесс джавака, но я не очень понимаю. Я включил многословный вывод, и я обнаружил, что он уходит из памяти при загрузке классов.
Есть ли способ найти, есть ли утечка памяти в программе javac?
javac] [loading ZipFileIndexFileObject[C:\Dev\jdks\jdk7\jre\lib\rt.jar(javax/xml/bind/annotation/XmlAnyElement.class)]]
javac] [loading ZipFileIndexFileObject[C:\Dev\jdks\jdk7\jre\lib\rt.jar(javax/xml/bind/annotation/XmlAttribute.class)]]
javac] [loading ZipFileIndexFileObject[C:\Dev\jdks\jdk7\jre\lib\rt.jar(javax/xml/bind/annotation/XmlSchemaType.class)]]
javac] [loading ZipFileIndexFileObject[C:\Dev\jdks\jdk7\jre\lib\rt.jar(javax/xml/bind/annotation/XmlElementDecl.class)]]
javac] [loading ZipFileIndexFileObject[C:\Dev\jdks\jdk7\jre\lib\rt.jar(javax/xml/bind/annotation/XmlSeeAlso.class)]]
Javac] [загрузки ZipFileIndexFileObject [C: \ Dev \ JDKs \ jdk7 \ JRE \ Lib \ rt.jar (javax/XML/привязка/аннотаций/XmlElement.class)]]
javac]
javac]
javac] The system is out of resources.
javac] Consult the following stack trace for details.
javac] java.lang.OutOfMemoryError: Java heap space
javac] at com.sun.tools.javac.code.Scope$ImportScope.makeEntry(Scope.java:515)
javac] at com.sun.tools.javac.code.Scope.enter(Scope.java:219)
javac] at com.sun.tools.javac.code.Scope.enter(Scope.java:201)
javac] at com.sun.tools.javac.code.Scope$StarImportScope.importAll(Scope.java:540)
javac] at com.sun.tools.javac.comp.MemberEnter.importAll(MemberEnter.java:147)
javac] at com.sun.tools.javac.comp.MemberEnter.visitTopLevel(MemberEnter.java:522)
javac] at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:459)
javac] at com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:401)
javac] at com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:876)
javac] at com.sun.tools.javac.code.Symbol.complete(Symbol.java:421)
javac] at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:821)
javac] at com.sun.tools.javac.comp.Enter.complete(Enter.java:491)
javac] at com.sun.tools.javac.comp.Enter.main(Enter.java:469)
javac] at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:929)
javac] at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:824)
javac] at com.sun.tools.javac.main.Main.compile(Main.java:439)
Для этой цели есть профилировщики памяти Java, такие как JProfiler, YourKit Profiler. Но если вы обнаружите утечку памяти, что вы хотите сделать? – Codo
(1) вероятность обнаружения утечки памяти в 'javac' исчезающе мала; он используется десятками тысяч людей каждый день. (2) без дополнительной информации (например, выполняемой вами задачи Ant и вывода из вашего сценария), никто не может помочь вам найти вашу проблему * real *. – kdgregory
@kdgregory - Я просто запускаю задачу javac ant с исходным каталогом, в котором есть мои классы java. –