2009-06-21 9 views
8

Dostaję ślady stosu tak:Co to są GeneratedMethodAccessor1,2, itp. I dlaczego nie można ich znaleźć?

java.lang.NoClassDefFoundError: sun/reflect/GeneratedMethodAccessor1 
    at sun.reflect.GeneratedMethodAccessor1.<clinit>(Unknown Source) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at java.lang.Class.newInstance0(Class.java:355) 
    at java.lang.Class.newInstance(Class.java:308) 
    at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377) 
    at sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGenerator.java:59) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:28) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at edu.tufts.cs.testsim.LogicalProcess.dispatchMessage(LogicalProcess.java:214) 
    at edu.tufts.cs.testsim.LogicalProcess.processForward(LogicalProcess.java:287) 
    at edu.tufts.cs.testsim.LogicalProcess.doOperation(LogicalProcess.java:423) 
    at edu.tufts.cs.testsim.LogicalProcess.run(LogicalProcess.java:434) 
    at java.lang.Thread.run(Thread.java:637) 
Caused by: java.lang.ClassNotFoundException: sun.reflect.GeneratedMethodAccessor1 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:316) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:288) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374) 
    ... 19 more 

Co GeneratedMethodAccessor1, GeneratedMethodAccessor2, GeneratedMethodAccessorN i co może być przyczyną ich nie można znaleźć? Piszę bajtowo przepisywanie kodu w czasie wykonywania, ale tylko przed załadowaniem klasy, a pierwsze kilka wywołań poprzez odbicie działa dobrze. Zastanawiam się, czy to się dzieje, gdy kompilator JIT dostaje blokadę mojego kodu, ale nie mam nawet dobrego pomysłu, jak rozpocząć debugowanie tego.

Odpowiedz

7

GeneratedMethodAccessor### to klasy generowane w środowisku wykonawczym przez implementację odbicia w celu wywołania metod i konstruktorów. Tworzy to mostek kodu bajtowego z instancji Method lub Constructor do faktycznego sposobu lub konstruktora. Więcej informacji jest dostępnych w kodzie źródłowym.

Deserializacja ma również coś podobnego, dzieląc niektóre z tego samego mechanizmu, aby wywołać najbardziej konstruktora non-Serializable.