什么是GeneratedMethodAccessor1,2等,为什么不能找到它们? [英] What are GeneratedMethodAccessor1,2,etc and why might they not be found?

查看:667
本文介绍了什么是GeneratedMethodAccessor1,2等,为什么不能找到它们?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到这样的堆栈跟踪:

I'm getting stack traces like this:

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

什么是GeneratedMethodAccessor1,GeneratedMethodAccessor2,GeneratedMethodAccessorN以及可能导致它们无法找到的原因?我在运行时进行了一些字节码重写,但只在加载类之前,前几次通过反射调用工作正常。我想知道在JIT编译器获取我的代码之后是否会发生这种情况,但我甚至不知道如何开始调试它。

What are GeneratedMethodAccessor1, GeneratedMethodAccessor2, GeneratedMethodAccessorN and what might be causing them to not be found? I am doing some byte code rewriting at run time, but only before the class is loaded, and the first several calls through reflection work fine. I'm wondering if this is happening after the JIT compiler gets a hold of my code, but I don't even have a very good idea of how to start debugging this.

推荐答案

GeneratedMethodAccessor ### 是运行时由反射实现生成的类,用于调用方法和构造函数。这形成了从方法构造函数的实例到实际方法或构造函数的字节码桥。源代码中提供了更多信息。

GeneratedMethodAccessor### are classes generated at runtime by the reflection implementation to call methods and constructors. This form a bytecode bridge from instances of Method or Constructor to the actual method or constructor. More information is available in the source code.

反序列化也做类似的事情,共享一些相同的机制,以调用派生最多的非 - 可序列化的构造函数。

Deserialisation also does something similar, sharing some of the same mechanism, to invoke the most derived non-Serializable constructor.

这篇关于什么是GeneratedMethodAccessor1,2等,为什么不能找到它们?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆