gpt4 book ai didi

Java - ClassFileTransformer.transform(...) 并发调用相同的 classLoader className 对

转载 作者:行者123 更新时间:2023-11-29 09:10:27 24 4
gpt4 key购买 nike

方法 ClassFileTransformer.transform(ClassLoader classLoader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) 的 J2SE 5.0 规范说明:

transformer will be called for every new class definition and every class redefinition. The request for a new class definition is made with ClassLoader.defineClass. The request for a class redefinition is made with Instrumentation.redefineClasses or its native equivalents. The transformer is called during the processing of the request, before the class file bytes have been verified or applied.

使用此信息,我不能说是否有可能为同一运行时类 (classLoader&className) 同时调用方法 ClassFileTransformer.transform。我知道 Instrumentation.redefineClasses 方法可以为同一个类同时调用,但这并不意味着这样的调用可以导致为同一个类同时调用 ClassFileTransformer.transform。有什么办法可以澄清我的不理解吗?

这对我来说很重要,因为我使用 Javassist 进行转换,并且可以从并发运行的方法 ClassFileTransformer.transform 中使用相同的 CtClass 实例。目前,我在 synchronized(ctClass) block 中使用 CtClass 实例进行所有工作,以防万一。

最佳答案

我只是尝试为同一个类同时调用方法 Instrumentation.redefineClasses 并检查我的类文件转换器 transform 方法是否被同时调用。答案是肯定的,ClassFileTransformer.transform 方法可以由 JVM 为同一个类同时调用。

关于Java - ClassFileTransformer.transform(...) 并发调用相同的 classLoader className 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12760515/

24 4 0