Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Java OOM - AspectJ or Java bug?

Thanks for doing your own investigative work :) I'll take a look at
the issue you've raised.

cheers
Andy

On 18 November 2012 07:59, Archie Cobbs <archie@xxxxxxxxxxxx> wrote:
> Final self-reply, I promise... :)
>
> This bug also occurs with AspectJ 1.7.1. I've updated the test case
> accordingly and also filed bug #394535.
>
> Thanks,
> -Archie
>
>
> On Sat, Nov 17, 2012 at 11:19 PM, Archie Cobbs <archie@xxxxxxxxxxxx> wrote:
>>
>> Replying to my own post...
>>
>> I just tried this on a Java 1.7 machine and instead of OutOfMemoryError, I
>> get this:
>>
>> Exception in thread "main" java.lang.reflect.GenericSignatureFormatError
>>     at
>> sun.reflect.generics.parser.SignatureParser.error(SignatureParser.java:126)
>>     at
>> sun.reflect.generics.parser.SignatureParser.progress(SignatureParser.java:135)
>>     at
>> sun.reflect.generics.parser.SignatureParser.parseFormalTypeParameters(SignatureParser.java:240)
>>     at
>> sun.reflect.generics.parser.SignatureParser.parseZeroOrMoreFormalTypeParameters(SignatureParser.java:221)
>>     at
>> sun.reflect.generics.parser.SignatureParser.parseClassSignature(SignatureParser.java:214)
>>     at
>> sun.reflect.generics.parser.SignatureParser.parseClassSig(SignatureParser.java:158)
>>     at
>> sun.reflect.generics.repository.ClassRepository.parse(ClassRepository.java:52)
>>     at
>> sun.reflect.generics.repository.ClassRepository.parse(ClassRepository.java:41)
>>     at
>> sun.reflect.generics.repository.AbstractRepository.<init>(AbstractRepository.java:74)
>>     at
>> sun.reflect.generics.repository.GenericDeclRepository.<init>(GenericDeclRepository.java:48)
>>     at
>> sun.reflect.generics.repository.ClassRepository.<init>(ClassRepository.java:48)
>>     at
>> sun.reflect.generics.repository.ClassRepository.make(ClassRepository.java:65)
>>     at java.lang.Class.getGenericInfo(Class.java:2271)
>>     at java.lang.Class.getTypeParameters(Class.java:640)
>>     at
>> sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:57)
>>     at
>> sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:53)
>>     at
>> sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:95)
>>     at
>> sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:105)
>>     at
>> sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140)
>>     at
>> sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
>>     at
>> sun.reflect.generics.repository.ClassRepository.getSuperclass(ClassRepository.java:84)
>>     at java.lang.Class.getGenericSuperclass(Class.java:696)
>>     at Bug.main(Bug.java:18)
>>
>> This is using:
>>
>> java version "1.7.0_09"
>> OpenJDK Runtime Environment (IcedTea7 2.3.3) (suse-3.16.1-x86_64)
>> OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
>>
>> So it appears that Java seems to think this is an AspectJ bug.
>>
>> Thanks,
>> -Archie
>>
>>
>> On Sat, Nov 17, 2012 at 11:13 PM, Archie Cobbs <archie@xxxxxxxxxxxx>
>> wrote:
>>>
>>> I have encountered a weird OutOfMemoryError problem.
>>>
>>> It appears to be some kind of infinite loop in Java's class file parsing.
>>> However, it only occurs after running the AspectJ compiler over the class.
>>>
>>> So I'm not sure who is at fault... AspectJ or Java itself?
>>>
>>> I'm using AspectJ 1.6.10 and java 1.6.0.37:
>>>
>>> java version "1.6.0_37"
>>> Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
>>> Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
>>>
>>> I've created a test case available here as an ant project. It is pretty
>>> simple, triggered by this class:
>>>
>>> public class Bug {
>>>
>>>     @org.springframework.beans.factory.annotation.Configurable
>>>     public static class ClassA<T extends Interface1 & Interface2> {
>>>     }
>>>
>>>     public static class ClassB extends ClassA<ClassB> implements
>>> Interface1, Interface2 {
>>>     }
>>>
>>>     public interface Interface1 {
>>>     }
>>>
>>>     public interface Interface2 {
>>>     }
>>>
>>>     public static void main(String[] args) throws Exception {
>>>         System.out.println(ClassB.class.getGenericSuperclass());
>>>     }
>>> }
>>>
>>> Compile that program, run the AspectJ compiler over it to weave the
>>> @Configurable annotation, and then run it.
>>>
>>> I get this result after a several second pause:
>>>
>>> Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
>>>     at java.util.Arrays.copyOf(Arrays.java:2760)
>>>     at java.util.Arrays.copyOf(Arrays.java:2734)
>>>     at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
>>>     at java.util.ArrayList.add(ArrayList.java:351)
>>>     at
>>> sun.reflect.generics.parser.SignatureParser.parseFormalTypeParameters(SignatureParser.java:190)
>>>     at
>>> sun.reflect.generics.parser.SignatureParser.parseZeroOrMoreFormalTypeParameters(SignatureParser.java:177)
>>>     at
>>> sun.reflect.generics.parser.SignatureParser.parseClassSignature(SignatureParser.java:171)
>>>     at
>>> sun.reflect.generics.parser.SignatureParser.parseClassSig(SignatureParser.java:126)
>>>     at
>>> sun.reflect.generics.repository.ClassRepository.parse(ClassRepository.java:34)
>>>     at
>>> sun.reflect.generics.repository.ClassRepository.parse(ClassRepository.java:23)
>>>     at
>>> sun.reflect.generics.repository.AbstractRepository.<init>(AbstractRepository.java:56)
>>>     at
>>> sun.reflect.generics.repository.GenericDeclRepository.<init>(GenericDeclRepository.java:30)
>>>     at
>>> sun.reflect.generics.repository.ClassRepository.<init>(ClassRepository.java:30)
>>>     at
>>> sun.reflect.generics.repository.ClassRepository.make(ClassRepository.java:47)
>>>     at java.lang.Class.getGenericInfo(Class.java:2254)
>>>     at java.lang.Class.getTypeParameters(Class.java:621)
>>>     at
>>> sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:39)
>>>     at
>>> sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:35)
>>>     at
>>> sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:77)
>>>     at
>>> sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:86)
>>>     at
>>> sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:122)
>>>     at
>>> sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31)
>>>     at
>>> sun.reflect.generics.repository.ClassRepository.getSuperclass(ClassRepository.java:66)
>>>     at java.lang.Class.getGenericSuperclass(Class.java:677)
>>>     at Bug.main(Bug.java:18)
>>>
>>> Any ideas?
>>>
>>> Thanks,
>>> -Archie
>>>
>>> --
>>> Archie L. Cobbs
>>>
>>
>>
>>
>> --
>> Archie L. Cobbs
>>
>
>
>
> --
> Archie L. Cobbs
>
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>


Back to the top