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 <[email protected]> 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<http://people.freebsd.org/~archie/bug.tgz>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
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users