2013-03-10 68 views
2

我有一个方法A.passLong(Long),它接收一个long作为参数。我仪器类B,并添加该方法的调用,并传递一个长常量。Instrumantation导致恒定池腐败

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

我用“javap -verbose”来反编译这个类的转储文件,它看起来像从常量池中读取的数字(我看到的与调试器相关的数字)是期望数量的串联以及常数池中的以下数字。

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

任何想法?

+0

修复仪器? – 2013-03-10 09:22:14

回答

2

这看起来像Sun Java1.5_04中的known issue。他们已经添加了一些代码来保护类中的反射(和常量池),并重新定义它们。见release notes。我知道Sun的1.5_12运作良好。

您正在使用哪个JVM,然后?

+0

我正在使用jdk150_06。我切换到jdk1.5.0_12,并解决了它。谢谢 – Genia 2013-03-10 09:37:25