2011-06-22 20 views
0

當觸發方法入口或方法出口事件時是否可以檢索當前jobject?我想標記用特定方法輸入的工作對象。目前我只能檢索定義類的方法,而不能檢索對象。在JVMTI的MethodEntry/MethodExit中檢索jobject

JVMTI API我沒有發現任何類似的東西。

我可以遍歷堆中方法definining類的所有實例,但是,這並不會告訴我有關哪個對象完全調用該方法的任何信息。

回答

0

使用BCI向您的代理插入JNI調用,如JVMTI中包含的heapProfiler示例所示。您可以將該對象作爲參數傳遞給您的方法(1);這樣你就不必聽每一個方法調用。

MethodEntry事件發生在靜態方法和本地方法中,所以它們包含實例對象是不合理的,加上JVMTI由於其糟糕的性能而不鼓勵使用MethodEntry

如果您確實必須使用MethodEntry,那麼您可以通過將其作爲局部變量(GetLocalObject)進行訪問來獲取該對象。它應該在插槽0中(使用局部變量表進行檢查)。


(1)您不能訪問尚未初始化的對象,所以你需要super後插入你的電話,如果你紋構造方法。