仪表导致恒定池的损坏

时间:2013-03-10 09:16:10

标签: java instrumentation

我有一个方法A.passLong(Long)接收一个long作为参数。我检测B类,并添加该方法的调用,并传递一个长常量。

当我调试调用的方法A.passLong(Long)时,我看到该方法接收的数字不是我作为参数传递的数字。

我使用“javap -verbose”用已检测的代码反编译类的转储,看起来从常量池读取的数字(我用调试器看到的数字)是预期数字和常量池中的以下数字。

这不是JIT问题,因为它在调试和JIT被禁用时会重现。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这看起来像Sun Java1.5_04中的known issue。之后他们添加了一些代码来保护类中的反射(和常量池),同时重新定义它们。见release notes。我知道Sun的1.5_12效果很好。

您使用的是哪个JVM?