Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] OutOfMemoryError caused by ltw of Groovy?

Well as I say, rather than !within(groovy), you will need to spell out
all your groovy type names individually !within(com.lee.groovy.Thing)
&& !within(com.lee.groovy.OtherThing) etc...  hopefully they are all
in the same package and you can exclude that package.
!within(com.lee.groovy..*)
There isn't another way, at the moment the weaver doesn't treat groovy
(or scala, or any JVM bytecode) as different just because a different
compiler produced it.

Andy

On 10 February 2011 16:52, Grey, Lee <Lee.Grey@xxxxxxx> wrote:
> I bumped it up to Xmx512m, but that still got the OOM error.  I went up to Xmx768m, and now there is no error, just a 45-second delay for the first invocation to complete.
>
> Can I skip this long delay by adding !within(groovy) to all my pointcuts, or is there a better way?
>
> Thanks,
> Lee
>
> -----Original Message-----
> From: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Andy Clement
> Sent: Thursday, February 10, 2011 7:25 PM
> To: aspectj-users@xxxxxxxxxxx
> Subject: Re: [aspectj-users] OutOfMemoryError caused by ltw of Groovy?
>
> Hi,
>
> AspectJ can weave Groovy just fine - Spring Insight uses AspectJ to weave into Grails apps in order to collect monitoring info.
>
> A few observations though:
>
> 1. groovy classes are *big*, bigger than their java counterparts.
> When AspectJ has a problem it tries to be helpful and print out the class containing the problem by converting the bytecode into its 'opcode' form - like you would see if you used javap.  Something has gone wrong and in trying to tell you what has gone wrong, it has run out of space trying to print this groovy class.  Unfortunately the original error is lost now this out of memory has occurred.
>
> 2. From your ajcore file I notice you have an Xmx of 256m, that isn't particularly high.
>
> I'd recommend running with a larger Xmx, that should enable the true error to come out as the groovy class will be printable.  Based on that error we can decide what to do next...  There currently is a
> !within(groovy) type pointcut, so you would just have to exclude them based on their names, but perhaps lets see what the underlying error is before doing anything else.
>
> cheers
> Andy
>
> On 10 February 2011 15:56, Grey, Lee <Lee.Grey@xxxxxxx> wrote:
>> I've been using AspectJ to advise a method call in Sonic ESB without
>> any issues for about a week.
>>
>> Recently, though, I started building out the functionality, and I
>> included the use of a Groovy class that is instantiated and called
>> from within my aspect.  About that same time, I started seeing a long
>> pause followed by a stack trace each time I ran the first message
>> through the Sonic container after a restart.
>>
>> I've now confirmed that this happens not upon instantiating the Groovy
>> object but during the first call to any one of its methods.  It
>> doesn't matter which method gets called.  That first method call will
>> cause the error that I've attached.
>>
>> Is this AspectJ gagging on Groovy?  What can I do to prevent?  I don't
>> need to use any aspects on the Groovy code, and I don't believe any of
>> my pointcuts reference my Groovy code.  I just need to make AspectJ
>> leave Groovy alone, I guess.
>>
>> Thanks,
>> Lee Grey
>>
>> Feb 10, 2011 6:50:31 PM org.aspectj.weaver.tools.Jdk14Trace error
>> SEVERE: org/codehaus/groovy/runtime/ArrayUtil
>> java.lang.OutOfMemoryError: Java heap space
>>  at java.io.ByteArrayOutputStream.write(Unknown Source)
>>  at java.io.PrintStream.write(Unknown Source)
>>  at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(Unknown Source)
>>  at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(Unknown Source)
>>  at sun.nio.cs.StreamEncoder.flushBuffer(Unknown Source)
>>  at java.io.OutputStreamWriter.flushBuffer(Unknown Source)
>>  at java.io.PrintStream.newLine(Unknown Source)
>>  at java.io.PrintStream.println(Unknown Source)
>>  at
>> org.aspectj.weaver.bcel.LazyMethodGen$BodyPrinter.print(LazyMethodGen.
>> java:652)
>>  at
>> org.aspectj.weaver.bcel.LazyMethodGen$BodyPrinter.run(LazyMethodGen.ja
>> va:572)
>>  at
>> org.aspectj.weaver.bcel.LazyMethodGen.print(LazyMethodGen.java:533)
>>  at
>> org.aspectj.weaver.bcel.LazyClassGen.printOne(LazyClassGen.java:834)
>>  at org.aspectj.weaver.bcel.LazyClassGen.print(LazyClassGen.java:793)
>>  at
>> org.aspectj.weaver.bcel.LazyClassGen.toLongString(LazyClassGen.java:78
>> 1)
>>  at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1703)
>>  at
>> org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:16
>> 18)
>>  at
>> org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1379
>> )
>>  at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1173)
>>  at
>> org.aspectj.weaver.tools.WeavingAdaptor.getWovenBytes(WeavingAdaptor.j
>> ava:467)
>>  at
>> org.aspectj.weaver.tools.WeavingAdaptor.weaveClass(WeavingAdaptor.java
>> :318)
>>  at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:96)
>>  at
>> org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(Cl
>> assPreProcessorAgentAdapter.java:54)
>>  at sun.instrument.TransformerManager.transform(Unknown Source)
>>  at sun.instrument.InstrumentationImpl.transform(Unknown Source)
>>  at java.lang.ClassLoader.defineClass1(Native Method)
>>  at java.lang.ClassLoader.defineClass(Unknown Source)
>>  at java.security.SecureClassLoader.defineClass(Unknown Source)
>>  at java.net.URLClassLoader.defineClass(Unknown Source)
>>  at java.net.URLClassLoader.access$100(Unknown Source)
>>  at java.net.URLClassLoader$1.run(Unknown Source)
>>  at java.security.AccessController.doPrivileged(Native Method)
>>  at java.net.URLClassLoader.findClass(Unknown Source) Feb 10, 2011
>> 6:50:31 PM org.aspectj.weaver.tools.Jdk14Trace info
>> INFO: Dumping to
>> C:\Sonic\Workbench7.5\eclipse\.\ajcore.20110210.185031.884.txt
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>


Back to the top