調用Java方法聲明爲native
時,JVM運行時必須執行的常見步驟是什麼?調用本地方法時,JVM必須做什麼?
HotSpot 1.8.0 JVM如何實現JNI函數調用?涉及哪些檢查步驟(例如,返回後的未處理異常?),JVM要執行哪些簿記(例如本地引用註冊表?)以及控制權在調用本地Java方法之後的位置?如果有人能夠提供本地HotSpot 1.8.0代碼的入口點或重要方法,我也會很感激。
聲明:我知道我可以自己閱讀代碼,但事先的解釋有助於快速找到我的代碼。另外,我發現這個問題值得谷歌搜索。 ;)
你遺漏了一些。在調用方法之前固定參數對象並在之後解除固定。彈出推送的任何幀,並在返回後釋放由該方法創建的所有本地引用。 – EJP
@EJP你是什麼意思的固定參數對象?HotSpot不支持常規意義上的對象鎖定。沒有本地參考實際上是「發佈」。 JVM通過兩條機器指令(我已經提到過)立即重置整個JNI句柄塊,任何創建的本地JNI參考自動變成垃圾。 – apangin