首頁 >Java >java教程 >Java 和記憶體消失之謎!

Java 和記憶體消失之謎!

Susan Sarandon
Susan Sarandon原創
2024-11-04 10:56:02755瀏覽

在Java Land這片神奇的土地上,住著一個小機器人,名叫JVM-bot。 JVM 機器人有一項非常重要的工作:追蹤記憶體!問題是,Java Land 中的內存就像一個大餅乾罐,每個人都想分一杯羹!因此,JVM-bot 必須確保每個人都有足夠的資源。

神奇的指標:totalMemory、freeMemory 和 maxMemory!

JVM-bot 有三個特殊指標 - 監控所有記憶體的工具:

Java и Тайна Исчезающей Памяти!

totalMemory - 此指示器顯示 JVM-bot 已擁有多少 cookie(或記憶體)。此方法顯示了 JVM 目前分配的記憶體量,這對於了解當前負載很有用。本質上,totalMemory 是我們口袋裡已有的記憶體「預算」。
freeMemory - 這個告訴他他的罐子裡還剩下多少餅乾(在他已有的記憶中)。此方法顯示totalMemory 中仍可使用的內存量。例如,如果 TotalMemory 為 500 MB,freeMemory 為 200 MB,則表示已佔用 300 MB。這個方法可以幫助我們了解現在有多少可用內存,以及何時應該考慮優化。
maxMemory - 這是所有指標中最大的!它顯示了 JVM-bot 可以擁有的最大 cookie 數量。如果已滿,則無法新增更多 cookie!例如,如果您將最大值設為 1024 MB,這就是上限,一旦達到該上限,JVM 將開始使用虛擬 cookie(記憶體),這將顯著降低效能。
以下程式碼範例展示了 JVM-bot 如何使用這些指標:

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 + " байт");
    }
}

JVM-bot 喜歡將自己視為 cookie(記憶體)守護者,使用其指示器來關注留下的寶貴的碎屑。

條目:頑皮的演算法小魔怪!

一個陽光明媚的日子,JVM-bot 正在專注於自己的業務,監控其指標,突然…砰!一群敏捷的小演算法小魔怪出現了!這些小妖精和 JVM 機器人一樣喜歡餅乾,而且它們很餓!

他們開始吞噬 JVM 機器人餅乾,到處咬一口。當小精靈吃掉餅乾時,JVM-bot 的空閒記憶體指標開始迅速下降!

Java и Тайна Исчезающей Памяти!

「喔不!」JVM-bot 揉著他的機器人頭喊道。 「如果這些小魔怪吃了太多餅乾,爪哇島的其他地方就沒有足夠的了!」

測量小精靈的食慾

JVM-bot 有個絕妙的主意!他用記憶表來看小妖怪吃了多少餅乾。

JVM 機器人首先查看 freeMemory,以檢查在小精靈開始享用它之前它還剩下多少 cookie。

long initialFreeMemory = runtime.freeMemory();
System.out.println("Свободная память перед едой гремлинов: " + initialFreeMemory + " байт");

然後他說:「好吧,小魔怪,讓我們看看你能做什麼!」讓它們自由奔跑,咬掉餅乾。

小精靈吃完飯後,JVM-bot 再次檢查空閒記憶體:

long remainingFreeMemory = runtime.freeMemory();
System.out.println("Свободная память после еды гремлинов: " + remainingFreeMemory + " байт");

最後,JVM-bot 進行計算以找出丟失了多少 cookie。那是被小魔怪吞噬的記憶!

long consumedMemory = initialFreeMemory - remainingFreeMemory;
System.out.println("Съеденная память: " + consumedMemory + " байт");

超級記憶體指示器 JVM-bot!

為了追蹤一切,JVM-bot 為自己建立了一個記憶體指示器!它看起來像一個帶有彩色部分的餅乾罐:

綠色代表已經吃完的餅乾(記憶體已使用)。
藍色代表罐子裡仍然安全的餅乾(免費內存)。
灰色表示可能永遠不會烘烤的餅乾(最大記憶體)。
這樣,JVM 機器人就可以密切關註一切,並判斷何時需要烘烤更多餅乾!

大紅色按鈕「GC」 - JVM-bot 的秘密武器!

Java и Тайна Исчезающей Памяти!
最後,JVM-bot 有一個紅色的大按鈕,上面寫著 GC(當然是垃圾收集的縮寫!)。這是他的緊急餅乾剝皮工具。如果事情失控並且小精靈到處留下麵包屑,JVM 機器人就會按下那個按鈕並發出尖叫聲! - 所有碎屑都消失了,JVM 機器人再次擁有乾淨、新鮮的記憶體。

呼叫垃圾收集器的範例程式碼:

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 + " байт");
    }
}

來自 JVM-bot 的提示:如何控制記憶體小精靈!

為了確保記憶體安全,JVM-bot 有一些技巧:

  • 測量前按 GC 按鈕以避免產生任何額外的碎屑。測量前清除碎片有助於獲得更準確的結果。當然,這並不總是必要的,但它對於測量精度很有用。

  • 不要測量得太頻繁! JVM-bot 僅在確實必要時才進行測量(避免循環測量),否則其指標可能會磨損。透過運行時過於頻繁地存取記憶體可能會造成小的延遲。相反,在演算法的開始和結束時進行單次測量。

  • 使用兆位元組 (MB) 等友善單位,以便每個人都能理解。

如何衡量演算法的記憶體消耗?

Java и Тайна Исчезающей Памяти!
為了測量一段特定的程式碼(例如演算法)佔用了多少內存,我們需要一個小技巧:

我們在執行程式碼之前測量初始記憶體。
我們執行我們的演算法。
我們在執行後測量記憶體。
我們發現測量之間的差異。
下面的程式碼範例將示範如何做到這一點:

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 + " байт");
    }
}

因此,JVM-bot 成為了 Java 王國的英雄,為每個人保護 cookie(或記憶體),無論有多少小妖精試圖吃掉它。請記住:有了 JVM-bot 及其記憶體指示器,Java 土地上的每個人總是會有足夠的 cookie! ?

以上是Java 和記憶體消失之謎!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn