如何为AJC Ant任务设置垃圾收集器?

时间:2013-09-24 03:57:25

标签: ant aspectj

编译时编织时出现内存错误。如您所见,我已经将Xmx(通过maxmem)设置为1024m。这可能是因为我试图编织的罐子大约是70MB。

如何设置垃圾收集器?我尝试使用X参数,但是当我使用JConsole连接到进程时,未设置ConcMarkSweep。

    <echo message="Weaving..."/>
    <aspectj:iajc classpathref="compile.libs" aspectpath="${src.dir}" outJar="${output.jar}" fork="true" maxmem="1024m" X="+UseConcMarkSweepGC">
        <inpath>
            <pathelement path="${classes.dir}"/>
        </inpath>
    </aspectj:iajc>

错误是:

Bugs for exceptions thrown have titles File:line from the top stack, 
e.g., "SomeFile.java:243"

If you don't find the exception below in a bug, please add a new bug
at http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ
To make the bug a priority, please include a test program
that can reproduce this exception.
GC overhead limit exceeded

when weaving classes 
when weaving 
when batch building BuildConfig[null] #Files=0 AopXmls=#0
GC overhead limit exceeded
java.lang.OutOfMemoryError: GC overhead limit exceeded
    at org.aspectj.apache.bcel.classfile.ConstantPool.copy(ConstantPool.java:69)
    at org.aspectj.apache.bcel.generic.ClassGen.<init>(ClassGen.java:161)
    at org.aspectj.weaver.bcel.LazyClassGen.<init>(LazyClassGen.java:255)
    at org.aspectj.weaver.bcel.BcelObjectType.getLazyClassGen(BcelObjectType.java:523)
    at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1742)
    at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1710)
    at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1472)
    at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1286)
    at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.weaveQueuedEntries(AjPipeliningCompilerAdapter.java:435)
    at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.afterCompiling(AjPipeliningCompilerAdapter.java:304)
    at org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$afterReturning$org_aspectj_ajdt_internal_compiler_CompilerAdapter$2$f9cc9ca0(CompilerAdapter.aj:73)
    at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:430)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1003)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:267)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:181)
    at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
    at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
    at org.aspectj.tools.ajc.Main.run(Main.java:355)
    at org.aspectj.tools.ajc.Main.runMain(Main.java:234)
    at org.aspectj.tools.ajc.Main.main(Main.java:84)

23-Sep-2013 23:58:12 org.aspectj.weaver.tools.Jdk14Trace info
INFO: Dumping to D:\Projects\Delete\AspectjTest\.\ajcore.20130923.234357.932.txt

1 fail|abort

2 个答案:

答案 0 :(得分:1)

解决方法是使用<java> ant命令,并将主weaver类列为运行的东西。 org.aspectj.tools.ajc.Main,您还必须手动设置此ant任务自动执行的所有args。

答案 1 :(得分:0)

我通过ANT exec任务使用args来调用 aspectj1.7/bin/ajc.bat 1.7.3)。 只需修改ajc.bat并将-Xmx64g替换为 -Xmx3g ,我就可以尝试应用它,例如在guava-18.0.jar

同样,这里也提到了:https://bugs.eclipse.org/bugs/show_bug.cgi?id=36234#c3

如果您不想使用 aspectj:iajc 任务,那么您应该使用 ant.bat (或sh)来运行 eclipse.ini (或sh)如上所述强>适当的JVM args 。

Eclipse 中(它通常在Eclipse VM中发生,如果没有正确配置,并且您不想在 {{1}中进行JVM arg更改文件)您需要为ANT目标调整隐含创建的 External Tools Configuration并设置JRE => Runtime JRE: [x] Separate JRE: ... 并调整其 VM arguments: -Xmx3g < / strong>例如。