Java Wissenspunkte (1)

1. Beschreiben Sie den Prozess Java-Objekte zu erstellen?

    Nachweis, ob die Klasse 1.1 geladen wird

    Ob, ob die virtuellen Möglichkeit, wenn eine neue Anweisung, zunächst die Parameter dieses Befehls zu überprüfen, ein Symbol verwies in einer Klasse konstanten Pool, und prüfen Sie diese symbolischen Referenzen im Namen einer Klasse lokalisiert geladen wurde, analysiert und initialisiert. Wenn nicht, dann müssen Sie den entsprechenden Klasse Ladevorgang auszuführen.

    1.2 zuordnet Speicher für die neue Klasse

    Nach Prüfung durch den Klassenlader, dann wird die virtuelle Maschine Objektzuordnung Speicher neugeboren, kann die erforderliche Speichergröße vollständig etabliert werden, nachdem die Klasse fertigen Laden von Objekten hat.

    1.3 Initialisierungswert Null

    Nachdem die Speicherzuweisung abgeschlossen ist, wird die virtuelle Maschine braucht, um Speicherplatz zuweisen auf einen Wert initialisiert von Null (ohne die Verwaltungsobjekte), Beispiele für diesen Schritt, um sicherzustellen, dass das Objektfeld nicht einen Anfangswert in dem Java-Code zugeordnet werden kann direkt verwendet, Zugriffsprogramm auf einen Nullwert der Datentypen der entsprechenden Felder ein.

    1.4 die notwendigen Einstellungen

    Virtuelle Maschine unterliegt die notwendigen Einstellungen, zum Beispiel, die dieses Objekt eine Instanz der Klasse ist, wie Informationen zu finden, wie Metadaten, Hash-Objekt zu tun, GC Ziel Subinformations-Generation Alter. Diese Information wird in dem Objekt-Header-Objekt in gespeichert.

    1.5 Verwendung der Init-Methode

    Nach Abschluss der oben genannten Arbeiten, aus der Sicht der virtuellen Maschinen hat ein neues Objekt erstellt worden, aber aus der Sicht der Java-Programm Sicht hat Objekterstellung gerade erst begonnen, <int> Methode nicht durchgeführt wurde, wird alle Felder sind immer noch Null. Also, in der Regel nach der Ausführung der neuen Anweisungen würde dann ausführen <init> Methode, in Übereinstimmung mit den Wünschen des Programmierers das Objekt zu initialisieren, so dass ein reales Objekt als vollständig entstehen.

2.java Weg, um ein Objekt zu erstellen?

Verwenden Sie das neue Schlüsselwort } → Konstruktor aufgerufen
Mit Hilfe der newInstance Methode der Klasse Klasse } → Konstruktor aufgerufen
Constructor Methoden Klasse newInstance } → Konstruktor aufgerufen
Unter Verwendung der Klon-Methode } → nicht den Konstruktor aufrufen
Verwenden Deserialisierung } → nicht den Konstruktor aufrufen

3. Diskussion über die Java-Speichermodell?

    Java-Speichermodell Spezifikation der Java Virtual Machine und dem Computerspeicher ist wie sie zusammenarbeiten. Java Virtual Machine ist ein komplettes Modell eines Computers, verfügt dieses Modell über ein Speichermodell, das auch als Java-Speichermodell bekannt.

    Java-Speichermodell put in der Java Virtual Machine in Gewinde Heap und Stack unterteilt.

    Jeder Thread läuft Java Virtual Machine einen eigenen Thread-Stack haben. Dieser Thread-Stack umfasst das Verfahren des aufrufenden Thread bezogenen Informationen ist der aktuelle Ausführungspunkt. Ein Thread kann nur seinen eigenen Thread-Stack zugreifen. Erstellen eines Threads sind lokale Variablen zu anderen Threads nicht sichtbar, nur sich selbst sichtbar. Jeder Thread verfügt über eine einzigartige Version von jeder lokalen Variablen.

    Heap enthält alle Objekte in Java-Programm erstellt, unabhängig davon, welches Objekt erstellt wird. Dazu gehört auch die ursprüngliche Version des Objekttyps. Wenn ein Objekt erstellt wird und dann zu einer lokalen Variable zugewiesen oder als Element mit variabler eines anderen Objekts verwendet wird, wird das Objekt immer noch auf dem Heap gespeichert.

   Lokale Call-Stack und lokal auf dem Thread-Stack gespeicherten Variablen Objekte auf dem Heap gespeichert.

4.static Variablen gespeichert?   

      1, der Stapelbereich (Stack) - Freigabe automatisch durch den Compiler, die Lagerung zugeordneten Parameterwert der Funktion , lokaler Variablen und dergleichen.

    2, der Heap-Bereich (heap) - in der Regel durch den Programmierer zugewiesen wird freigegeben, wenn der Programmierer nicht freigibt, kann durch das Ende des Verfahrens zurückgewonnen werden os. Beachten Sie, dass es sich um eine Stapeldatenstruktur ganz anders ist, berührt es ähnliche Verteilerliste.

    3 ist die globale Zone (Beruhigungszone) (statisch) - globale und statische Variablen werden in einer von a, initialisiert globale und statische Variablen in einem Bereich, nicht initialisierten globalen Variablen und statische Variablen gespeicherten nicht initialisierte benachbarten Ein weiteres Stück der Region. Nach dem Programm hat System - Release.

    4, Bereich Literale - konstanter String ist hier platziert. Nach dem Ende des Programms durch das System ausgelöst.

    5, der Programmcode Bereich - Binär-Code gespeichert Funktionskörper. 

5.volatile sagen Sie uns?

    flüchtig ist ein Typ-Modifikator wird entworfen durch verschiedene Threads Zugriff modifiziert werden und Variablen ändern. Volatile Typdefinition variabel ist, werden aus dem entsprechenden Speichersystem jedesmal, wenn sie verwendet wird, extrahiert. Ohne den Cache zu verwenden. Membervariablen volatil, alle Fäden jederzeit sehen Sie die Werte der Variablen sind gleich nach der Änderung.

     Wenn ein gemeinsam benutztes Variable (Mitglied Variablen der Klasse, die Klasse der statischen Elementvariablen) nach volatilem deklariert wird, dann haben die beide Semantik:

1), um sicherzustellen, Sichtbarkeit, wenn verschiedene Threads auf diesen Variable Betrieb, die einen Thread ändert der Wert einer Variablen ist, wird dieser neue Wert in anderen Fäden sofort sichtbar ist.  

2) Verbotsbefehlsneuordnungs.

6. Wie Synchronisation einzufädeln?

    6. 1. Die  Synchronisationsverfahren , welche Modifikation? Keywords  Modified Synchronisationsverfahren mit dem synchronisierten Schlüsselwort

    6.2.  Synchronisation Es gibt mehrere Methoden zu erreichen, sind das, was? Synchronisiert sind, warten und benachrichtigen

      wait (): einen Thread in einem Wartezustand machen, und die Verriegelung durch das Objekt gehalten wird .
      sleep (): einen laufenden Faden in einem Schlafzustand machen, ist es ein statischer Methodenaufruf dieses Verfahren zur Erfassung InterruptedException Ausnahme.
      notify (): wache einen Thread in einem Wartezustand auf, der Feststellung , dass dieses Verfahren zu dem Zeitpunkt aufgerufen wird, nicht genau mit einem Thread Wartezustand aufzuwecken, aber die durch die JVM Thread aufwacht bestimmt wird, aber nicht von Priorität.
      notityAll (): wache einen Thread in einen Wartezustand überhaupt auf, dass nicht alle Threads aufwachen , ein Objekt zu sperren, sondern lassen Sie sie konkurrieren.

    6.3. Mit dem Spezialfeldvariablen (volatile) Thread - Synchronisation implementieren, können nicht final Variablen geändert werden

        a.volatile Schlüsselwort ermöglicht den Zugriff auf die Domäne eines variablen schleusenfreien Mechanismus 
        b. volatile Modifikation Domäne ist äquivalent der virtuellen Maschine auf die Domäne zu sagen , könnten andere Thread - Updates sein 
        c. So wird jedes Mal , wenn diese Domäne verwenden neu berechnet und stattdessen den Wert in dem Register der Verwendung 
        d.volatile keine atomare Operation bereitzustellen, kann es nicht verwendet werden , um die letzte Art der variablen zu ändern ,

    6.4 Die Verwendung von Sperren für die Wiederverwendung Thread-Synchronisierung

    6.5. Verwenden lokale Variablen Thread-Synchronisation zu erreichen,

7. Der Unterschied zwischen Prozess und Faden?

    (1) Adreßraum: eine Ausführungseinheit innerhalb des Prozesses, der Prozess mindestens einen Faden, sie teilen den Adressraum des Prozesses, und das Verfahren hat einen eigenen Adressraum; 

    (2) Ressourcenbesitzer: Der Prozess von einer Einheit von Ressourcenzuweisung und Ressource innerhalb des gleichen Prozesses Threads gemeinsam den Prozess gehört 

    (3) Ein Thread ist die Grundeinheit der Prozessorleistung, aber der Prozess ist es nicht. 

    (4) beide können gleichzeitig ausgeführt werden.

    Verfahren ist die Grundeinheit der Ressourcenzuweisung, Gewinde ist die Grundeinheit der Zeitplanung. Prozess enthält Fäden, Fäden die Prozessressourcen gemeinsam nutzen.

    

    

Veröffentlicht 36 Originalarbeiten · erntete Lob 19 · Ansichten 30000 +

Ich denke du magst

Origin blog.csdn.net/qq_27182767/article/details/79701987
Empfohlen
Rangfolge