Im magischen Land Java Land lebte ein kleiner Roboter namens JVM-bot. Der JVM-Bot hatte eine sehr wichtige Aufgabe: den Überblick über den Speicher zu behalten! Tatsache ist, dass die Erinnerung in Java Land wie eine große Keksdose war und jeder ein Stück davon haben wollte! Deshalb musste JVM-bot sicherstellen, dass genug für alle da war.
Der JVM-Bot hatte drei spezielle Indikatoren – Tools zur Überwachung des gesamten Speichers:
totalMemory – Dieser Indikator zeigt dem JVM-Bot an, wie viele Cookies (oder Speicher) er bereits enthält. Diese Methode zeigt die aktuell von der JVM zugewiesene Speichermenge an, was zum Verständnis der aktuellen Auslastung nützlich ist. Im Wesentlichen ist totalMemory das Speicher-„Budget“, das wir bereits in der Tasche haben und nutzen können.
freeMemory – Dieser sagte ihm, wie viele Kekse noch in seinem Glas waren (in der Erinnerung, die er bereits hatte). Diese Methode zeigt die Menge an Speicher an, die innerhalb von totalMemory noch verwendet werden kann. Wenn der Gesamtspeicher beispielsweise 500 MB und der freie Speicher 200 MB beträgt, bedeutet dies, dass bereits 300 MB belegt sind. Diese Methode hilft uns zu verstehen, wie viel freier Speicher derzeit verfügbar ist und wann wir über eine Optimierung nachdenken sollten.
maxMemory – Und das ist der größte Indikator von allen! Es zeigte die maximale Anzahl an Cookies an, die der JVM-Bot jemals haben konnte. Wenn es voll ist, können Sie keine weiteren Cookies hinzufügen! Wenn Sie beispielsweise das Maximum auf 1024 MB eingestellt haben, ist dies die Obergrenze, und sobald diese erreicht ist, beginnt die JVM mit der Verwendung virtueller Cookies (Speicher), was die Leistung spürbar verringert.
Hier ist ein Codebeispiel, das zeigt, wie der JVM-Bot diese Indikatoren verwenden könnte:
public class MemoryExample { public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); // Получаем текущую память long totalMemory = runtime.totalMemory(); // Общее количество памяти long freeMemory = runtime.freeMemory(); // Свободная память long maxMemory = runtime.maxMemory(); // Максимально доступная память System.out.println("Общая память: " + totalMemory + " байт"); System.out.println("Свободная память: " + freeMemory + " байт"); System.out.println("Максимальная память: " + maxMemory + " байт"); } }
Der JVM-Bot betrachtete sich gern als Cookie-(Speicher-)Wächter, der mithilfe seiner Indikatoren ein Auge auf die wertvollen Krümel hatte, die zurückblieben.
An einem sonnigen Tag kümmerte sich der JVM-Bot gerade um seine eigenen Angelegenheiten und überwachte seine Indikatoren, als plötzlich... BAM! Ein Haufen flinker kleiner Algorithmus-Gremlins ist aufgetaucht! Diese Gremlins liebten Kekse genauso sehr wie der JVM-Bot, und sie waren hungrig!
Sie fingen an, die JVM-Bot-Kekse zu verschlingen und hier und da einen Bissen zu nehmen. Der FreeMemory-Indikator des JVM-Bots begann rapide zu sinken, als die Gremlins die Kekse aßen!
„Oh nein!“ rief JVM-Bot aus und rieb sich den Roboterkopf. „Wenn diese Gremlins zu viele Kekse essen, bleibt nicht genug für den Rest von Java Land übrig!“
JVM-Bot hat eine brillante Idee! Er nutzt seine Speichermesser, um zu sehen, wie viele Kekse die Gremlins essen.
Der JVM-Bot schaute zuerst in freeMemory, um zu überprüfen, wie viele Kekse er noch übrig hatte, bevor die Gremlins anfingen, sich daran zu erfreuen.
long initialFreeMemory = runtime.freeMemory(); System.out.println("Свободная память перед едой гремлинов: " + initialFreeMemory + " байт");
Dann sagte er: „Okay, Gremlins, mal sehen, was du tun kannst!“ und lassen Sie sie frei laufen und Kekse abbeißen.
Nachdem die Gremlins gefressen hatten, überprüfte der JVM-Bot erneut den freien Speicher:
long remainingFreeMemory = runtime.freeMemory(); System.out.println("Свободная память после еды гремлинов: " + remainingFreeMemory + " байт");
Schließlich führte JVM-Bot die Berechnungen durch, um herauszufinden, wie viele Cookies fehlten. Es war eine Erinnerung, die die Gremlins verschluckt haben!
long consumedMemory = initialFreeMemory - remainingFreeMemory; System.out.println("Съеденная память: " + consumedMemory + " байт");
Super Memory Indicator JVM-Bot!
Um den Überblick zu behalten, hat sich JVM-Bot einen Speicherindikator erstellt! Es sah aus wie eine Keksdose mit farbigen Abschnitten:
Grün für Kekse, die bereits gegessen wurden (Speicher belegt).
Blau für die Kekse, die noch sicher im Glas sind (Freier Speicher).
Grau für Kekse, die möglicherweise nie backen (maximaler Speicher).
Auf diese Weise konnte der JVM-Bot alles im Auge behalten und erkennen, wann es Zeit war, weitere Kekse zu backen!
Großer roter Knopf „GC“ – die Geheimwaffe des JVM-Bots!
Und schließlich hatte der JVM-Bot einen großen roten Knopf mit der Aufschrift GC (natürlich die Abkürzung für Garbage Collection!). Das war sein Keksschälwerkzeug für den Notfall. Wenn die Dinge außer Kontrolle geraten würden und die Gremlins überall Krümel hinterlassen würden, würde der JVM-Bot diesen Knopf drücken und jubeln! - Alle Krümel verschwanden und der JVM-Bot hatte wieder einen sauberen, frischen Speicher.
Beispielcode zum Aufrufen des Garbage Collectors:
public class MemoryExample { public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); // Получаем текущую память long totalMemory = runtime.totalMemory(); // Общее количество памяти long freeMemory = runtime.freeMemory(); // Свободная память long maxMemory = runtime.maxMemory(); // Максимально доступная память System.out.println("Общая память: " + totalMemory + " байт"); System.out.println("Свободная память: " + freeMemory + " байт"); System.out.println("Максимальная память: " + maxMemory + " байт"); } }
Tipps von JVM-bot: So behalten Sie Gedächtnis-Gremlins unter Kontrolle!
Um den Speicher zu schützen, hat JVM-Bot ein paar Tricks:
Drücken Sie vor dem Messen die GC-Taste, um zusätzliche Krümel zu vermeiden. Das Entfernen von Schmutz vor der Messung trägt dazu bei, genauere Ergebnisse zu erhalten. Dies ist natürlich nicht immer notwendig, aber für die Messgenauigkeit nützlich.
Messen Sie nicht zu oft! Der JVM-Bot misst nur, wenn es wirklich notwendig ist (vermeiden Sie Messungen in einer Schleife), da sonst seine Indikatoren verschleißen können. Ein zu häufiger Zugriff auf den Speicher über die Laufzeit kann zu kleinen Verzögerungen führen. Nehmen Sie stattdessen Einzelmessungen am Anfang und am Ende des Algorithmus vor.
Verwenden Sie benutzerfreundliche Einheiten wie Megabyte (MB), damit jeder es verstehen kann.
Um zu messen, wie viel Speicher ein bestimmter Codeabschnitt, beispielsweise ein Algorithmus, beansprucht, benötigen wir einen kleinen Trick:
Wir messen den anfänglichen Speicher, bevor wir den Code ausführen.
Wir führen unseren Algorithmus aus.
Wir messen das Gedächtnis nach der Ausführung.
Wir finden den Unterschied zwischen den Messungen.
Das folgende Codebeispiel zeigt, wie das geht:
public class MemoryExample { public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); // Получаем текущую память long totalMemory = runtime.totalMemory(); // Общее количество памяти long freeMemory = runtime.freeMemory(); // Свободная память long maxMemory = runtime.maxMemory(); // Максимально доступная память System.out.println("Общая память: " + totalMemory + " байт"); System.out.println("Свободная память: " + freeMemory + " байт"); System.out.println("Максимальная память: " + maxMemory + " байт"); } }
So wurde JVM-Bot zum Helden von Java Land und schützte den Keks (oder die Erinnerung) für alle, egal wie viele Gremlins versuchten, ihn zu essen. Denken Sie daran: Mit dem JVM-Bot und seinen Speicherindikatoren wird es in Java Land immer genug Cookies für alle geben! ?
Das obige ist der detaillierte Inhalt vonJava und das Geheimnis der verschwindenden Erinnerung!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!