Bug 302544 - AspectJ compiler runs out of memory when compiling 846 aspects with 1024m allocated heap size
Summary: AspectJ compiler runs out of memory when compiling 846 aspects with 1024m all...
Status: NEW
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.6.6   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-02-11 02:11 EST by John Ky CLA
Modified: 2010-02-11 19:09 EST (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description John Ky CLA 2010-02-11 02:11:13 EST
JAVA_OPTS="-Xmx1024m " \
ajc \
  -source 1.6 \
  -classpath "/opt/csltools/Linux/2.6/x86_64/gcc-4.1.2/64/aspectj_1.6.6/lib/aspectjrt.jar:../pub/server/lib/asn1rt-ext.jar:/opt/csltools/Linux/2.6/x86_64/gcc-4.1.2/64/groovy_1.7.0/lib/groovy-"1.7.0".jar" \
  -injars ../pub/server/lib/amp.jar \
  ../obj/server/aspects/com/omxgroup/xstream/amp/*.aj \
  -outjar ../pub/server/lib/amp-ext.jar
/home/joky/wa/head2/amp_java/obj/server/aspects/com/omxgroup/xstream/amp/TestUserNameAspect.aj [error] Internal compiler error
java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:2882)
        at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
        at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
        at java.lang.StringBuilder.append(StringBuilder.java:119)
        at java.lang.StringBuilder.append(StringBuilder.java:115)
        at java.util.AbstractCollection.toString(AbstractCollection.java:422)
        at java.lang.String.valueOf(String.java:2827)
        at java.lang.StringBuilder.append(StringBuilder.java:115)
        at org.aspectj.weaver.bcel.BcelObjectType.printWackyStuff(BcelObjectType.java:512)
        at org.aspectj.weaver.bcel.LazyClassGen.printOne(LazyClassGen.java:801)
        at org.aspectj.weaver.bcel.LazyClassGen.print(LazyClassGen.java:776)
        at org.aspectj.weaver.bcel.LazyClassGen.toLongString(LazyClassGen.java:764)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1837)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1755)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1515)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1293)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.weaveQueuedEntries(AjPipeliningCompilerAdapter.java:435)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.queueForWeaving(AjPipeliningCompilerAdapter.java:371)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.afterProcessing(AjPipeliningCompilerAdapter.java:358)
        at org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$after$org_aspectj_ajdt_internal_compiler_CompilerAdapter$5$6b855184(CompilerAdapter.aj:98)
        at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:652)
        at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:392)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1007)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:268)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:182)
        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)

(no source information available)
ABORT

Exception thrown from AspectJ 1.6.6

This might be logged as a bug already -- find current bugs at
  http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&component=Compiler

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.
Java heap space

when weaving aspects
when weaving
when batch building BuildConfig[null] #Files=846 AopXmls=#0
Java heap space
java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:2882)
        at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
        at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
        at java.lang.StringBuilder.append(StringBuilder.java:119)
        at java.lang.StringBuilder.append(StringBuilder.java:115)
        at java.util.AbstractCollection.toString(AbstractCollection.java:422)
        at java.lang.String.valueOf(String.java:2827)
        at java.lang.StringBuilder.append(StringBuilder.java:115)
        at org.aspectj.weaver.bcel.BcelObjectType.printWackyStuff(BcelObjectType.java:512)
        at org.aspectj.weaver.bcel.LazyClassGen.printOne(LazyClassGen.java:801)
        at org.aspectj.weaver.bcel.LazyClassGen.print(LazyClassGen.java:776)
        at org.aspectj.weaver.bcel.LazyClassGen.toLongString(LazyClassGen.java:764)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1837)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1755)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1515)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1293)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.weaveQueuedEntries(AjPipeliningCompilerAdapter.java:435)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.queueForWeaving(AjPipeliningCompilerAdapter.java:371)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.afterProcessing(AjPipeliningCompilerAdapter.java:358)
        at org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$after$org_aspectj_ajdt_internal_compiler_CompilerAdapter$5$6b855184(CompilerAdapter.aj:98)
        at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:652)
        at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:392)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1007)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:268)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:182)
        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)

Feb 11, 2010 5:41:44 PM org.aspectj.weaver.tools.Jdk14Trace info
INFO: Dumping to /home/joky/wa/head2/amp_java/src/./ajcore.20100211.174144.646.txt
Comment 1 Andrew Clement CLA 2010-02-11 11:05:56 EST
I'm not sure JAVA_OPTS is respected.  Can you open ajc.bat - you will see a hardcoded Xmx of 64M - can you try directly increasing that and compiling again?  Also please use AspectJ 1.6.8 as it has a different memory profile to 1.6.6
Comment 2 John Ky CLA 2010-02-11 16:41:16 EST
Also happens in 1.6.8.

As I was running on Linux, ajc.bat wouldn't work.

When I tried changing JAVA_OPTS to 2024m, it worked.  But that's an awful lot of memory to be using for a compile.
Comment 3 Andrew Clement CLA 2010-02-11 18:18:13 EST
It is a lot of memory yes, but 846 aspects is also a lot of aspects :)
Comment 4 John Ky CLA 2010-02-11 19:09:19 EST
(In reply to comment #3)
> It is a lot of memory yes, but 846 aspects is also a lot of aspects :)

Yes it is a lot of aspects.

I was auto generating aspects to insert new methods into autogenerated classes from another 3rd party tool.  Nothing fancy.  

It's still about 2MB per aspect, which seems awfully expensive to me.