[JAVA] Wie Speicher in objektorientierten Sprachen funktioniert

Warum ich beschlossen habe, einen Artikel zu schreiben

Ich benutze Spring Boot bei der Arbeit und DI (Dependency Injection), das ist das Herzstück davon. Das Singleton-Entwurfsmuster wird übernommen, und standardmäßig wird nur eine Instanz erstellt. Selbst wenn ich es im Internet nachgeschlagen habe, gab es einen Artikel, der fehlerhaft zu sein schien, wenn ich ihn so implementierte, dass er einen Zustand mit Federstiefel hatte. Denken Sie darüber nach? ?? ?? Es kann nur eine Instanz erstellt werden. Ist es jedoch in Ordnung, wenn gleichzeitig Anforderungen für eine API gestellt werden? Was ist los ?? ?? Ich dachte. Vielleicht wo ist die Speicherzuordnung? Welcher Zeitraum? Ich dachte, das lag daran, dass ich es nicht verstanden habe, also habe ich es neu organisiert.

Speichermechanismus (Java-basiert)

Erstens der Speicherbereich ・ Statischer Bereich -Günstiger Bereich -Stapelbereich

Erweitern Sie es als Nächstes in den Speicher (meistens, sodass es wahrscheinlich andere gibt).

  1. Code-Informationen (Klassenkörper)
  2. Globale Variablen
  3. Instanz
  4. Instanzvariable (vom Konstruktor angegeben)
  5. Lokale Variablen
  6. Argumente für jede Methode
  7. Rückgabewert

Hier ist jeweils eine Tabelle スクリーンショット 2020-06-20 21.57.09.png

Wenn Sie also noch einmal darüber nachdenken, bedeutet "Kein Status", dass, wenn Sie ihn so implementieren, dass er eine Instanzvariable enthält, Da es fehlerhaft ist, werden 5, 6 und 7 im Stapelbereich als Anforderungs-Thread-Informationen erweitert, sodass Sie sich keine Sorgen über Fehler machen müssen.

Singleton überdenken

Selbst wenn Sie sich das Einzel-Tonnen-Designmuster noch einmal ansehen, wird es Ihnen in den Sinn kommen. Erstellen Sie nur eine Instanz als globale Variable. Da es sich um eine private Variable handelt, wird sie nicht erneut erstellt. Durch Aufrufen der Methode getInstance () wird die Adresse der im Heap-Bereich erweiterten Instanz zurückgegeben. Wenn Sie jeder Klasse mit der Spring-Boot-Annotation @Bean, @Controller, @Service und @Component hinzufügen, scheint das Verhalten intern so zu sein.

singlton.java


public class Singlton{
private static Singlton singlton = new Singlton();
    private Singlton(){}
    public static Singlton getInstance(){
        return singlton;
    }
}

Bonus: Ich habe in der Welt von NARUTO darüber nachgedacht

● Wenn Sie es mit NARUTO vergleichen ... Naruto (Hauptteil): Code-Informationen → Ich habe verschiedene Techniken. Naruto (Schattenkörper): Objekt → Die zu erledigende Arbeit ist anders. Wenn Sie den Körper nicht regelmäßig freigeben, geht dem Naruto-Körper das Chakra aus (ein Speicherverlust tritt auf, das Objekt wird regelmäßig gelöscht, wenn die Müllabfuhr erfolgt). Verhalten von Naruto (Shadow Alter Ego): lokale Variablen usw. → Aktionen wie das Werfen eines Rückschwerts oder das Verwenden von Techniken.

Fazit: Was ist NARUTO ... Objekt Ninja !!!

Recommended Posts

Wie Speicher in objektorientierten Sprachen funktioniert
Funktionsweise des Dispatcher-Servlets in Spring MVC
Wie jul-to-slf4j funktioniert
Tauchen Sie ein in die Funktionsweise von HashMap in Java
Argumente variabler Länge in verschiedenen Sprachen
[Java] Wie Spring DI funktioniert