我正在閱讀here 的JVM的內部結構,並且遇到了術語「本地指針」,這是什麼意思,它與JNI有什麼關係?什麼是本機指針和returnAddress?
在它上面的文字談到計劃櫃檯,並說:
正在運行的程序的每個線程都有自己的PC寄存器或程序計數器,當線程啓動時創建的。 pc寄存器的大小是一個字,所以它可以同時擁有一個本地指針和一個returnAddress。當線程執行Java方法時,pc寄存器包含線程正在執行的當前指令的地址。 「地址」可以是一個本地指針,也可以是方法字節碼開頭的偏移量。如果一個線程正在執行一個本地方法,那麼pc寄存器的值是未定義的。
從我理解的returnAddress將是任何引用地址。像: Object o = new Object();
這裏o
將返回在堆中創建的對象的地址。我的理解是否正確?
任何解釋兩者的例子都會很棒。
你是什麼意思的「本地指令」?此外,官方文檔還討論了它https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.1 – rd22
@ rd22本地指令是機器代碼指令代碼實際運行在本機CPU上。 –
本文檔和您在註釋中引用的文檔與JNI無關。他們都在談論由JVM維護的*軟件* PC寄存器,該寄存器引用了字節碼指令。它可以直接指向字節碼指令('本地指針',術語選擇不佳)或者是從當前方法開始的偏移。 – EJP