2013-03-10 72 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