Ich habe die Interna von JVM von here gelesen und stieß auf den Begriff "native Zeiger", was bedeutet es, hat es etwas mit JNI zu tun?Was ist ein nativer Zeiger und returnAddress?
Im Text darüber spricht über Programmzähler und sagt:
Jeder Thread eines laufenden Programms einen eigenen PC-Register hat, oder Programmzähler, der bei der Erstellung der Thread gestartet wird. Das pc-Register ist ein Wort in der Größe, so dass es sowohl einen nativen Zeiger als auch eine returnAddress enthalten kann. Wenn ein Thread eine Java-Methode ausführt, enthält das PC-Register die Adresse der aktuellen Anweisung, die vom Thread ausgeführt wird. Eine "Adresse" kann ein nativer Zeiger oder ein Offset vom Beginn der Bytecodes einer Methode sein. Wenn ein Thread eine native Methode ausführt, ist der Wert des PC-Registers nicht definiert.
Von was ich verstehe, readAddress wäre jede Referenzadresse. Wie hier: Object o = new Object();
Hier würde o
die Adresse des im Heap erstellten Objekts zurückgeben. Ist mein Verständnis richtig?
Jedes Beispiel, das beide erklärt, wäre großartig.
Was meinen Sie mit "native Anweisung"? Auch die offizielle Dokumentation spricht darüber https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.1 – rd22
@ rd22 Eine native Anweisung ist eine Maschinencode-Anweisung der nativen CPU läuft der Code tatsächlich. –
Dieses Dokument und das, das Sie in Kommentaren angeben, haben nichts mit JNI zu tun. Sie sprechen beide über das * Software * PC-Register, das von der JVM verwaltet wird und sich auf einen Bytecode-Befehl bezieht. Es kann entweder direkt auf einen Bytecode-Befehl zeigen ('nativer Zeiger', schlechte Wahl der Terminologie) oder ein Offset vom Start der aktuellen Methode sein. – EJP