Dienstag, Januar 28, 2020

Wo sind Instanz-Variablen ein Objekt in der JVM?

Ist eine Instanz-variable eines Objekts in Java auf dem stack gespeichert werden oder die Methode Bereich der JVM?

Außerdem haben wir verschiedene Instanz-variable für mehrere threads?

Wenn es gespeichert ist, in der Methode area wie ist das Instanz-variable unterscheidet sich von der statischen variable speichern?

Instanz-Variablen werden mit einem pro Objekt. Statische Variablen sind eine pro-Klasse. Threads (Art von) teilen sich den gleichen Speicher

InformationsquelleAutor saurabh goyal | 2014-05-08

2 Kommentare

  1. 18

    Stack und heap sind die Erinnerungen, bereitgestellt von der OS an die JVM läuft im
    system.Stack ist ein Speicher Ort, wo die Methoden und die lokalen Variablen gespeichert werden.
    (variable referenziert entweder primitive oder Objekt Referenzen sind ebenfalls auf dem stack gespeichert). Heap ist ein Speicher Ort, wo die Objekte und Ihre Instanz-Variablen gespeichert werden.

    Also um es zusammenzufassen:

    • Class-Objekte, einschließlich der Methode code und statische Felder: heap.
    • Objekte, einschließlich Instanz-Felder: heap.
    • Lokale Variablen und Aufrufe von Methoden: stack

    Außerdem haben wir verschiedene Instanz-variable für mehrere threads?

    Jeder thread eine Programm counter (PC) und einen java-stack. PC wird mit dem java-stack zum speichern der Zwischenwerte, die dynamische Verknüpfung, die Rückgabewerte für Methoden und dispatch-Ausnahmen. Dies wird verwendet, der Ort der Register.

    Auch mehr über die Gewinde, die Sie wirklich Lesen sollten dieses Thema Wo ist Thread-Objekt erstellt? Stack oder Heap?.

    Wenn es gespeichert ist, in der Methode area wie ist das Instanz-variable unterscheidet sich von
    statische variable Speicher?

    Wie Sie oben sehen können statische Felder sind im heap gespeichert. Auf der anderen Seite, lokale Variablen gespeichert sind, in den stack.

    //EDIT

    Laut den Kommentaren von Bruno Reis und Peter Lawrey, sollten Sie auch Lesen Sie über Escape-Analyse

    1. Wikipedia
    2. Virtual Machine Performance-Verbesserungen,Escape-Analyse
    Dies ist nicht unbedingt korrekt. Moderne JVMs sind viel komplexer und Optimierungs-algorithmen, die bestimmen können, dass die Speicherung eines Objektes auf einer bestimmten situation auf die stack führen kann, um eine bessere Leistung (d.h., weniger stress auf der GC). Zum Beispiel, google JVM Escape-Analyse. In jedem Fall, es sei denn, Sie sind schriftlich etwas wirklich niedrigen Niveau, Sie sollten nicht egal, ob etwas gespeichert ist, auf dem heap oder stack.
    Ich sage nicht, dass dies unbedingt korrigieren. Dies ist nur eine sehr einfache Sicht, wie werden Variablen gespeichert im Java.
    stimmt, aber escape-Analyse führt selten zur Vermeidung der Verwendung des Heaps.
    Ihre Annahme ist falsch: ich habe nicht nach unten Abstimmung Ihre Antwort. Die Antwort ist in Ordnung, nicht falsch, gut genug für die meisten Entwickler einfach nicht 100% streng richtige. (Ich wusste nicht wählen-für mich ist dies völlig neutral!) (und sieht aus wie dein Kommentar verschwunden ist!)
    Ich diesem Fall bin ich wirklich, sorry 🙂 hab ich auch bearbeitet, die Antwort mit den links zu den escape-Analyse und so weiter …

    InformationsquelleAutor Matej Špilár

  2. 3

    Um genau zu sein,

    • Instanz-Variablen gespeichert werden auf dem heap.
    • lokale Variablen auf dem stack(im Falle der variable nicht eine primitive[Führungsgröße] Referenz-Variablen Leben auf dem stack

      und das Objekt auf dem heap ). Nur method invocation und Teilergebnisse
      gespeichert wird im stack nicht die Methode selbst.
    • Statische Variablen und Methoden(einschließlich statische und Nicht Statische) auf der
      Methode Bereich.

    Referenz: Head First Java

    InformationsquelleAutor Jayanth

Kostenlose Online-Tests