私は最近、Javaプロジェクトで(サードパーティライブラリのアップグレードのために)コードを変更しました。 これは、私のant compilationタスクがメモリから外れることにつながりました(ヒープスペース - 古い世代)。javacのタスクでメモリリークを見つける方法
私は1GのXmxを以前使用していましたが、コンパイルに成功するために2Gを使用する必要があります。 私はjavacプロセスのプロファイルを作成しましたが、私は多くの洞察を得ていません。 私は冗長な出力を有効にしており、クラスをロードする際にメモリが不足していることがわかりました。
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の\のJDK \ 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)
JProfiler、YourKit Profilerなど、この目的のためのJavaメモリプロファイラがあります。しかし、メモリリークが見つかった場合、何をしたいのですか? – Codo
(1) 'javac'でメモリリークを見つけられる可能性はあまりありません。それは毎日何万人もの人々によって使用されています。 (あなたが実行しているAntタスクやスクリプトからの出力など)詳細な情報がなくても、誰かがあなたの*本当の*問題を見つけるのを手助けすることは不可能です。 – kdgregory
@kdgregory - 私はちょうど私のJavaクラスを持つソースディレクトリを持つjavac antタスクを実行しています。 –