Wenn sich ein Objekt im Heap befindet und dieses Objekt einige Instanzvariablen hat, sind einige primitive Typen und wenige sind andere Objekte. Also, wenn dieses Objekt 5 Felder hat, wie ist das Objekt im Speicher strukturiert? Um genau zu sein ... wo speichert Java den Datentyp jedes Feldes? Gibt es einige 'Flag-Bytes' und einige 'Daten-Bytes', wobei die 'Flag-Bytes' den Datentyp der nächsten 'Daten-Bytes' identifizieren?Wie erkennt Java, ob eine Position primitiv oder referenziert ist
ich einige zusätzliche Details beziehe mich über diese Antwort fortfahren: https://stackoverflow.com/a/19623603/1364747
Diese Antwort wirft viel mehr Detail, wie die Daten selbst im Speicher abgelegt wird: https://stackoverflow.com/a/1907455/1364747
es gibt aber noch nicht Sagen Sie, wo das Flag gespeichert ist, das besagt, dass der Datentyp int/long/double/float/reference ist.
Bezieht sich dies auf die In-Memory-Darstellung? Ich denke, dass dies weitgehend der Umsetzung überlassen bleibt. Tatsächlich glaube ich, dass, sobald die JVM eine Klassendatei geladen hat, die als * gültig * bestimmt wurde, streng genommen, muss sie diese Information nicht zusammen mit den tatsächlichen Instanzdaten "speichern". Es ist einfach nicht relevant für die Ausführung. Wenn die Instanz introduziert ist (z. B. mit Reflexion), kann die Information in den Klassendaten nachgeschlagen werden. Und ... da ist es: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-FieldType – Marco13
Ich kenne die Antwort auf diese Frage nicht, aber in der Assemblersprache wird, ob ein Datenstück als ein Zeiger oder als ein Seitenwert interpretiert wird, durch die Art von Anweisungen bestimmt, die auf diese Daten einwirken. Wenn ich dies auf Java ausweite, würde ich raten, dass, wenn Java den Code in Bytecode kompiliert, er Bytecode-Anweisungen kompiliert, um Referenztypen als Zeiger auf andere Speicherstellen und primitive Typen als Gesichtswerte zu behandeln. Dies ist jedoch eine vollständige Schätzung. – jrahhali
Okay. Also könnte grob JVM-Implementierung 20 Bytes zusammenhängender Daten im Speicher speichern, und welches Byte sollte als int interpretiert werden und welche Bytes sollten als double-part1 interpretiert werden und double-part2 würde von der Klasse bezogen werden? Oder es könnte in JVM-spezifischer Weise für die Leistung behandelt werden .. ok. – Teddy