Ein Memorandum von dem, was ich gelernt habe, weil ich mich über meine Gedanken zur Erinnerung beraten habe. Was die Begriffe betrifft, schreibe ich die Teile, die ich so kenne, wie sie sind. Im Gegenteil, wenn es falsch verwendet zu werden scheint, weisen Sie bitte darauf hin (und lassen Sie es mich wissen).
Bei der Hauptausführung (oder wenn eine Klasse, die eine Hauptfunktion hat, bevor sie von jvm interpretiert wird), Laden Sie die zugehörige Klasse wurmartig in den Speicher.
(Es kann getroffen werden, je nachdem, wie Sie darüber denken.) ** Sie müssen sich dessen nicht bewusst sein. Da die Sprache Java eine Sprache ist, müssen Implementierer die Speicherverwaltung (insofern) nicht kennen. Dieser Bereich ist auf Wikipedia geschrieben. [Java # Garage Collection-Wikipedia](https://ja.wikipedia.org/wiki/Java#%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3% 82% B3% E3% 83% AC% E3% 82% AF% E3% 82% B7% E3% 83% A7% E3% 83% B3)
Wenn Sie sich der Speicherverwaltung bewusst sind, werden Sie über die Implementierung einer JVM sprechen. (Wenn Sie es vollständig verwalten möchten, sollten Sie zuerst C oder C ++ verwenden?)
Sie sollten sich der rechten Seite des statischen Feldes bewusst sein. Das statische Feld wird beim Laden der Klasse erstellt. Wenn eine starke Verarbeitung auf die rechte Seite gestellt wird (Initialisierung), verursacht dies Speicherdruck. Instanzvariablen, statische Initialisierer und Initialisierer sollten ebenfalls berücksichtigt werden.
Bei der Instanzerstellung wird ein Heap zugewiesen und ein Objekt erstellt. (Ausführung von Instanzvariablen, Instanzmethoden, Initialisierern) Offensichtlich kostet es jedes Mal Geld, wenn es generiert wird.
Wenn es keine Nebenwirkungen gibt, ist statische Aufladung besser, da die Erzeugung nicht viel kostet. Der hier erwähnte Nebeneffekt ist, ob es unabhängig vom Status der Instanz erstellt werden kann. Ich verstehe, dass die sogenannte Util-Klasse positiv genutzt werden kann. (Da die Klasse geladen wird, wenn die Hauptmethode ausgeführt wird, sind keine Generierungskosten erforderlich.)
public static int plus(int a, int b){
retrun a + b;
}
Es gibt eine unveränderliche Kontroverse.
Was ist unveränderlich? Unveränderliche (unveränderliche) und veränderbare (veränderbare) Objekte.
Typische Beispiele in Java sind "String", "LocalDateTime" usw. Es scheint, dass Affirmative und Negative heiße Diskussionen über diesen Tag und diese Nacht führen.
** Bejahend: ** Wenn die Werte nicht aktualisiert werden, ist das Programm sicher. Auch wenn Sie eine neue Instanz erstellen, sollte die ursprüngliche Instanz nicht erforderlich sein, sodass sie von GC entsprechend kopiert wird.
** Negativ: ** Verschwenderische Erstellungskosten der Instanz. (Überlegt neu zu schreiben) ~~ Gefahr eines Speicherverlusts. ~~
Als Entwickler wäre es schön, denselben Wert so implementieren zu können, dass er dieselbe Referenz wie String enthält, aber es wäre schwierig, ihn so stark in die Logik zu integrieren. Ich denke, es ist besser, sich der Unveränderlichkeit bewusst zu sein.
Auch wenn Sie nicht zu viel darüber nachdenken, können Sie es so implementieren, dass kein Speicher wie zuvor verloren geht. Zum Beispiel das Folgende.
Grundsätzlich bleibt die Speicherverwaltung Java überlassen, solange Java verwendet wird.
Es gibt Copy GC und Full GC. Sie können ein GC-Protokoll erhalten. (Vm Option)
Mir wurde das GC-Protokoll des Systems angezeigt, das ich entwickle. Im Protokoll trat fullGC zu Beginn des Starts mehrmals auf. (In der Vergangenheit wurde der Speicher anscheinend zur Laufzeit angegeben, aber aus irgendeinem Grund scheint er jetzt angehalten zu haben. Dies kann daran liegen, dass es sich um eine Testumgebung handelt.) Wenn ich die niedrigste zu verwendende Zeile kenne, dachte ich, ich sollte die vm-Option "-Xms" angeben, um zu verhindern, dass fullGC auftritt.
Ich würde gerne wieder GC studieren.
Ich hatte mir ungefähr zwei Wochen lang Sorgen darüber gemacht, aber ich habe mich einmal dem Java-Speicher angenähert. Ich suchte im Internet nach Informationen und fragte verschiedene Leute, aber es kam mir nicht in den Sinn, also brauchte ich eine Weile, um zu verstehen. Ich bin den Führungskräften vor Ort sehr dankbar für ihre höflichen Erklärungen, während ich beschäftigt war.
@ j5c8k6m8 habe diesen Artikel gelesen und ein Gedicht geschrieben, also habe ich einen Link gepostet. Qiita - Benötigen Sie speicherbewusste Programmierung (Implementierung) Ich habe es gelesen, aber es war eine Lernerfahrung.
So überprüfen Sie Qiita --OutOfMemoryError
Recommended Posts