不安全的类加载问题?

Laz*_*key 6 java unsafe

Unsafe有一个方法来确保初始化类:

Unsafe.ensureClassInitialized(Class) line: not available [native method]
Run Code Online (Sandbox Code Playgroud)

我怀疑这种类型的初始化并没有像普通的java类加载那样锁定类,因为我偶尔碰到一些不可能的情况.如果需要,我可以在以后提供更多详细信息,但是有人知道使用Unsafe的类加载是否有这样的怪癖?

顺便说一句,这是一个关于该类如何加载的简短堆栈跟踪:

Unsafe.ensureClassInitialized(Class) line: not available [native method]               
UnsafeFieldAccessorFactory.newFieldAccessor(Field, boolean) line: 25
ReflectionFactory.newFieldAccessor(Field, boolean) line: 122    
Field.acquireFieldAccessor(boolean) line: 918    
Field.getFieldAccessor(Object) line: 899               
Field.get(Object) line: 358          
Run Code Online (Sandbox Code Playgroud)

DNA*_*DNA 0

这里有一个类似的问题:https://issues.apache.org/bugzilla/show_bug.cgi ?id=43867(搜索“不安全”以跳转到相关部分)这可能会有所帮助,但如果没有就很难判断更多上下文和代码...

Tomcat 希望通过使用反射来清除类中的静态字段,但由于反射的工作方式,无意中导致类初始化代码重新运行。当它遇到尝试使用日志工厂的代码时,它不知道它已经通过将日志工厂中的字段设置为空来破坏日志工厂。

因此,通过反射(直接或使用 Tomcat)清除字段可能是一个问题......