我有一个方法 A.passLong(Long),它接收 long 作为参数。我检测类 B,并添加该方法的调用,并传递一个长常量。
当我调试调用的方法 A.passLong(Long) 时,我发现该方法接收到的数字不是我作为参数传递的数字。
我使用“javap -verbose”来反编译带有检测代码的类的转储,看起来从常量池中读取的数字(我用调试器看到的数字)是预期数字和常量池中的以下数字。
这不是 JIT 问题,因为在调试和禁用 JIT 时它会重现。
有什么想法吗?
最佳答案
这看起来像 known issue在Sun Java1.5_04中。此后,他们添加了一些代码来在重新定义类时保护类中的反射(和常量池)。请参阅release notes 。我知道 Sun 的 1.5_12 运行良好。
那么您使用的是哪个 JVM?
关于java - 插桩导致常量池损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15320676/