Bug 193848 - OutOfMemory (heap) when ajc compiling large project (3000 files)
Summary: OutOfMemory (heap) when ajc compiling large project (3000 files)
Status: RESOLVED WORKSFORME
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: DEVELOPMENT   Edit
Hardware: PC Windows XP
: P3 critical (vote)
Target Milestone: ---   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-06-21 19:40 EDT by Ken Dougan CLA
Modified: 2007-06-25 16:09 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ken Dougan CLA 2007-06-21 19:40:51 EDT
Note: I get the same error with 1.5.3 and the latest DEVELOPMENT build (June21/07)

---- AspectJ Properties ---
AspectJ Compiler DEVELOPMENT built on Monday Jun 11, 2007 at 16:05:11 GMT
---- Dump Properties ---
Dump file: ajcore.20070621.173320.655.txt
Dump reason: java.lang.OutOfMemoryError
Dump on exception: true
Dump at exit condition: abort
---- Exception Information ---
java.lang.OutOfMemoryError: Java heap space
	at org.aspectj.org.eclipse.jdt.internal.compiler.util.Util.getInputStreamAsCharArray(Util.java:239)
	at org.aspectj.org.eclipse.jdt.internal.compiler.util.Util.getFileCharContent(Util.java:70)
	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.CompilationUnit.getContents(CompilationUnit.java:57)
	at org.aspectj.org.eclipse.jdt.internal.compiler.parser.TheOriginalJDTScannerClass.setSource(TheOriginalJDTScannerClass.java:3364)
	at org.aspectj.org.eclipse.jdt.internal.compiler.parser.TheOriginalJDTScannerClass.setSource(TheOriginalJDTScannerClass.java:3380)
	at org.aspectj.org.eclipse.jdt.internal.compiler.parser.TheOriginalJDTParserClass.getMethodBodies(TheOriginalJDTParserClass.java:6208)
	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:508)
	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:329)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:974)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:262)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:178)
	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:378)
	at org.aspectj.tools.ajc.Main.runMain(Main.java:253)
	at org.aspectj.tools.ajc.Main.main(Main.java:88)
---- System Properties ---
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C:\Java\jdk1.6.0_01\jre\bin
java.vm.version=1.6.0_01-b06
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
sun.java.launcher=SUN_STANDARD
user.country=CA
sun.os.patch.level=Service Pack 2
java.vm.specification.name=Java Virtual Machine Specification
user.dir=C:\projects\mosaic.trunk
java.runtime.version=1.6.0_01-b06
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C:\Java\jdk1.6.0_01\jre\lib\endorsed
os.arch=x86
java.io.tmpdir=C:\DOCUME~1\KENDOU~1\LOCALS~1\Temp\
line.separator=

java.vm.specification.vendor=Sun Microsystems Inc.
user.variant=
os.name=Windows XP
sun.jnu.encoding=Cp1252
java.library.path=C:\Java\jdk1.6.0_01\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Support Tools\;C:\Program Files\Subversion\bin;C:\Java\jre1.6.0_01\bin;C:\Java\jdk1.6.0_01\bin;C:\Program Files\aspectj153\bin;C:\oracle\product\10.2.0\db_1\bin;C:\Program Files\apache-ant-1.7.0\bin;C:\Program Files\IDM Computer Solutions\UltraEdit-32;C:\Program Files\apache-ant-1.7.0\bin;C:\Program Files\QuickTime\QTSystem\
java.specification.name=Java Platform API Specification
java.class.version=50.0
sun.management.compiler=HotSpot Client Compiler
os.version=5.1
user.home=C:\Documents and Settings\kendougan
user.timezone=America/Denver
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=Cp1252
java.specification.version=1.6
java.class.path=C:\Program Files\aspectj153\lib\aspectjtools.jar;C:\Java\jdk1.6.0_01\lib\tools.jar;.;C:\Program Files\aspectj153\lib\aspectjrt.jar;C:\Java\jre1.6.0_01\lib\ext\QTJava.zip
user.name=kendougan
java.vm.specification.version=1.0
java.home=C:\Java\jdk1.6.0_01\jre
sun.arch.data.model=32
user.language=en
java.specification.vendor=Sun Microsystems Inc.
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.6.0_01
java.ext.dirs=C:\Java\jdk1.6.0_01\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
sun.boot.class.path=C:\Java\jdk1.6.0_01\jre\lib\resources.jar;C:\Java\jdk1.6.0_01\jre\lib\rt.jar;C:\Java\jdk1.6.0_01\jre\lib\sunrsasign.jar;C:\Java\jdk1.6.0_01\jre\lib\jsse.jar;C:\Java\jdk1.6.0_01\jre\lib\jce.jar;C:\Java\jdk1.6.0_01\jre\lib\charsets.jar;C:\Java\jdk1.6.0_01\jre\classes
java.vendor=Sun Microsystems Inc.
file.separator=\
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
sun.io.unicode.encoding=UnicodeLittle
sun.cpu.endian=little
sun.desktop=windows
sun.cpu.isalist=
---- Command Line ---
ajc
-Xms256M
-Xmx1024M
-g
-log
C:\projects\mosaic.trunk\ajc.log
-progress
-cp
C:\projects\mosaic.trunk\lib\PDFBox-0.7.2.jar;C:\projects\mosaic.trunk\lib\activation.jar;C:\projects\mosaic.trunk\lib\alloy.jar;C:\projects\mosaic.trunk\lib\ant.jar;C:\projects\mosaic.trunk\lib\antlr.jar;C:\projects\mosaic.trunk\lib\aspectjrt.jar;C:\projects\mosaic.trunk\lib\aspectjtools.jar;C:\projects\mosaic.trunk\lib\avalon-framework.jar;C:\projects\mosaic.trunk\lib\axis.jar;C:\projects\mosaic.trunk\lib\batik-svggen.jar;C:\projects\mosaic.trunk\lib\batik.jar;C:\projects\mosaic.trunk\lib\cayenne.jar;C:\projects\mosaic.trunk\lib\commons-beanutils-1.7.jar;C:\projects\mosaic.trunk\lib\commons-digester-1.7.jar;C:\projects\mosaic.trunk\lib\commons-discovery.jar;C:\projects\mosaic.trunk\lib\commons-math-1.0.jar;C:\projects\mosaic.trunk\lib\easymock.jar;C:\projects\mosaic.trunk\lib\fop.jar;C:\projects\mosaic.trunk\lib\itext.jar;C:\projects\mosaic.trunk\lib\jai_codec.jar;C:\projects\mosaic.trunk\lib\jai_core.jar;C:\projects\mosaic.trunk\lib\jasperreports.jar;C:\projects\mosaic.trunk\lib\jaxrpc.jar;C:\projects\mosaic.trunk\lib\jcommon-0.9.7.jar;C:\projects\mosaic.trunk\lib\jdic.jar;C:\projects\mosaic.trunk\lib\jdom.jar;C:\projects\mosaic.trunk\lib\jh.jar;C:\projects\mosaic.trunk\lib\jide.jar;C:\projects\mosaic.trunk\lib\junit-addons-1.4.jar;C:\projects\mosaic.trunk\lib\junit.jar;C:\projects\mosaic.trunk\lib\log4j-1.2.8.jar;C:\projects\mosaic.trunk\lib\mail.jar;C:\projects\mosaic.trunk\lib\ojdbc14-10.2.0.jar;C:\projects\mosaic.trunk\lib\poi-2.5.1-final-20040804.jar;C:\projects\mosaic.trunk\lib\poi-contrib-2.5.1.jar;C:\projects\mosaic.trunk\lib\saaj.jar;C:\projects\mosaic.trunk\lib\saxon8.jar;C:\projects\mosaic.trunk\lib\tcjavaspy2.jar;C:\projects\mosaic.trunk\lib\velocity-tools-generic-1.1.jar
-1.5
-argfile
C:\projects\mosaic.trunk\mosaic-build.lst
-d
C:\projects\mosaic.trunk\build
---- Full Classpath ---
C:\Java\jdk1.6.0_01\jre\lib\resources.jar(1071615 bytes)
C:\Java\jdk1.6.0_01\jre\lib\rt.jar(46062484 bytes)
C:\Java\jdk1.6.0_01\jre\lib\sunrsasign.jar(missing)
C:\Java\jdk1.6.0_01\jre\lib\jsse.jar(616317 bytes)
C:\Java\jdk1.6.0_01\jre\lib\jce.jar(88256 bytes)
C:\Java\jdk1.6.0_01\jre\lib\charsets.jar(6825435 bytes)
C:\Java\jdk1.6.0_01\jre\classes(0 entries)
C:\Java\jdk1.6.0_01\jre\lib\ext\dnsns.jar(8241 bytes)
C:\Java\jdk1.6.0_01\jre\lib\ext\localedata.jar(842219 bytes)
C:\Java\jdk1.6.0_01\jre\lib\ext\sunjce_provider.jar(170257 bytes)
C:\Java\jdk1.6.0_01\jre\lib\ext\sunmscapi.jar(31632 bytes)
C:\Java\jdk1.6.0_01\jre\lib\ext\sunpkcs11.jar(224493 bytes)
C:\projects\mosaic.trunk\lib\PDFBox-0.7.2.jar(3276299 bytes)
C:\projects\mosaic.trunk\lib\activation.jar(54829 bytes)
C:\projects\mosaic.trunk\lib\alloy.jar(347886 bytes)
C:\projects\mosaic.trunk\lib\ant.jar(736810 bytes)
C:\projects\mosaic.trunk\lib\antlr.jar(372003 bytes)
C:\projects\mosaic.trunk\lib\aspectjrt.jar(114989 bytes)
C:\projects\mosaic.trunk\lib\aspectjtools.jar(8235199 bytes)
C:\projects\mosaic.trunk\lib\avalon-framework.jar(62694 bytes)
C:\projects\mosaic.trunk\lib\axis.jar(1599495 bytes)
C:\projects\mosaic.trunk\lib\batik-svggen.jar(164659 bytes)
C:\projects\mosaic.trunk\lib\batik.jar(2111580 bytes)
C:\projects\mosaic.trunk\lib\cayenne.jar(2557694 bytes)
C:\projects\mosaic.trunk\lib\commons-beanutils-1.7.jar(188671 bytes)
C:\projects\mosaic.trunk\lib\commons-digester-1.7.jar(139966 bytes)
C:\projects\mosaic.trunk\lib\commons-discovery.jar(74527 bytes)
C:\projects\mosaic.trunk\lib\commons-math-1.0.jar(152709 bytes)
C:\projects\mosaic.trunk\lib\easymock.jar(38873 bytes)
C:\projects\mosaic.trunk\lib\fop.jar(1519742 bytes)
C:\projects\mosaic.trunk\lib\itext.jar(1138709 bytes)
C:\projects\mosaic.trunk\lib\jai_codec.jar(258160 bytes)
C:\projects\mosaic.trunk\lib\jai_core.jar(1900631 bytes)
C:\projects\mosaic.trunk\lib\jasperreports.jar(1685096 bytes)
C:\projects\mosaic.trunk\lib\jaxrpc.jar(32071 bytes)
C:\projects\mosaic.trunk\lib\jcommon-0.9.7.jar(362283 bytes)
C:\projects\mosaic.trunk\lib\jdic.jar(89160 bytes)
C:\projects\mosaic.trunk\lib\jdom.jar(153654 bytes)
C:\projects\mosaic.trunk\lib\jh.jar(347246 bytes)
C:\projects\mosaic.trunk\lib\jide.jar(684994 bytes)
C:\projects\mosaic.trunk\lib\junit-addons-1.4.jar(58787 bytes)
C:\projects\mosaic.trunk\lib\junit.jar(129623 bytes)
C:\projects\mosaic.trunk\lib\log4j-1.2.8.jar(370549 bytes)
C:\projects\mosaic.trunk\lib\mail.jar(347137 bytes)
C:\projects\mosaic.trunk\lib\ojdbc14-10.2.0.jar(1536979 bytes)
C:\projects\mosaic.trunk\lib\poi-2.5.1-final-20040804.jar(802216 bytes)
C:\projects\mosaic.trunk\lib\poi-contrib-2.5.1.jar(55209 bytes)
C:\projects\mosaic.trunk\lib\saaj.jar(19427 bytes)
C:\projects\mosaic.trunk\lib\saxon8.jar(3730821 bytes)
C:\projects\mosaic.trunk\lib\tcjavaspy2.jar(13083 bytes)
C:\projects\mosaic.trunk\lib\velocity-tools-generic-1.1.jar(14242 bytes)
---- Compiler Messages ---
error at (no source information available)
C:\projects\mosaic.trunk\src\com\entero\mosaic\domain\reporters\ReconCompNetByProdType6AReporter.java:0::0 Internal compiler error
java.lang.OutOfMemoryError: Java heap space
	at org.aspectj.org.eclipse.jdt.internal.compiler.util.Util.getInputStreamAsCharArray(Util.java:239)
	at org.aspectj.org.eclipse.jdt.internal.compiler.util.Util.getFileCharContent(Util.java:70)
	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.CompilationUnit.getContents(CompilationUnit.java:57)
	at org.aspectj.org.eclipse.jdt.internal.compiler.parser.TheOriginalJDTScannerClass.setSource(TheOriginalJDTScannerClass.java:3364)
	at org.aspectj.org.eclipse.jdt.internal.compiler.parser.TheOriginalJDTScannerClass.setSource(TheOriginalJDTScannerClass.java:3380)
	at org.aspectj.org.eclipse.jdt.internal.compiler.parser.TheOriginalJDTParserClass.getMethodBodies(TheOriginalJDTParserClass.java:6208)
	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:508)
	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:329)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:974)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:262)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:178)
	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:378)
	at org.aspectj.tools.ajc.Main.runMain(Main.java:253)
	at org.aspectj.tools.ajc.Main.main(Main.java:88)

abort ABORT -- (OutOfMemoryError) Java heap space
Java heap space
java.lang.OutOfMemoryError: Java heap space
	at org.aspectj.org.eclipse.jdt.internal.compiler.util.Util.getInputStreamAsCharArray(Util.java:239)
	at org.aspectj.org.eclipse.jdt.internal.compiler.util.Util.getFileCharContent(Util.java:70)
	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.CompilationUnit.getContents(CompilationUnit.java:57)
	at org.aspectj.org.eclipse.jdt.internal.compiler.parser.TheOriginalJDTScannerClass.setSource(TheOriginalJDTScannerClass.java:3364)
	at org.aspectj.org.eclipse.jdt.internal.compiler.parser.TheOriginalJDTScannerClass.setSource(TheOriginalJDTScannerClass.java:3380)
	at org.aspectj.org.eclipse.jdt.internal.compiler.parser.TheOriginalJDTParserClass.getMethodBodies(TheOriginalJDTParserClass.java:6208)
	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:508)
	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:329)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:974)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:262)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:178)
	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:378)
	at org.aspectj.tools.ajc.Main.runMain(Main.java:253)
	at org.aspectj.tools.ajc.Main.main(Main.java:88)

---- org.aspectj.weaver.bcel.BcelWorld@5a9de6 ----
Shadow mungers:
Empty
Type mungers:
Empty
Late Type mungers:
Empty
Comment 1 Ron Bodkin CLA 2007-06-21 19:49:29 EDT
Does it help if you increase permgen space, e.g., -XX:MaxPermSize=256m (or larger)? The out of memory error in this case is deceitful because it isn't really out of heap at all.

Otherwise, can you compile with more -Xmx maximum memory, or compile a smaller set of files?


Comment 2 Ken Dougan CLA 2007-06-22 11:07:41 EDT
No it doesn't help adding the following:

ajc -Xms256M -Xmx1024M -XX:PermSize=512m -XX:MaxPermSize=1024m ...

Also, compiling with smaller batches of files should be considered a temporary workaround at best.  Long term this issue should be fixed.  It's alot of work to sort out on large projects the compile order when compared with just javac called once to build the entire project.  I can do it but it will cost me alot of time to setup incrementally building the .jars and I would imagine this would be a common problem for other large projects in general.
Comment 3 Andrew Clement CLA 2007-06-23 17:55:14 EDT
er... you don't override the memory settings for the compiler like that ... you have to edit the ajc.bat and modify the -Xmx passed to the java process it launches, the default is 64M.
Comment 4 Ken Dougan CLA 2007-06-25 16:09:16 EDT
Doh!