ホームページ > Java > &#&チュートリアル > Javaと消えた記憶の謎!

Javaと消えた記憶の謎!

Susan Sarandon
リリース: 2024-11-04 10:56:02
オリジナル
733 人が閲覧しました

魔法の国 Java Land には、JVM ボットという名前の小さなロボットが住んでいました。 JVM ボットには、メモリを追跡するという非常に重要な仕事がありました。問題は、Java Land での思い出は大きなクッキーの瓶のようなもので、誰もがその一部を欲しがっていたということです。したがって、JVM ボットは全員に十分な量があることを確認する必要がありました。

魔法のインジケーター: totalMemory、freeMemory、maxMemory!

JVM ボットには 3 つの特別なインジケーター - すべてのメモリを監視するツールがありました:

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

totalMemory - このインジケーターは、JVM ボットがすでに保持している Cookie (またはメモリ) の数を示しました。このメソッドは、JVM によって割り当てられた現在のメモリ量を表示します。これは、現在の負荷を理解するのに役立ちます。基本的に、totalMemory は、私たちがすでにポケットに入れて使用できるメモリの「予算」です。
freeMemory - これは、瓶の中に (既に持っていたメモリ内に) クッキーが何枚残っているかを彼に教えてくれました。このメソッドは、totalMemory 内でまだ使用できるメモリの量を示します。たとえば、totalMemory が 500 MB で freeMemory が 200 MB の場合、これは 300 MB がすでに使用されていることを意味します。この方法は、現在空きメモリがどのくらいあるのか、いつ最適化を検討すべきかを理解するのに役立ちます。
maxMemory - これはすべての指標の中で最大の指標です。これは、JVM ボットが持つことができる Cookie の最大数を示しました。いっぱいになっている場合は、それ以上 Cookie を追加することはできません。たとえば、最大値を 1024 MB に設定している場合、これが上限であり、これに達すると、JVM は仮想 Cookie (メモリ) の使用を開始し、パフォーマンスが著しく低下します。
以下は、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 ボットは、自分自身を Cookie (メモリ) の保護者であると考えることを好んでおり、そのインジケーターを使用して、残された貴重な残骸を監視しています。

エントリー:いたずらアルゴリズム グレムリン!

ある晴れた日、JVM ボットは自分自身の仕事に専念し、インジケーターを監視していましたが、突然... バン!機敏な小さなアルゴリズム グレムリンがたくさん登場しました!これらのグレムリンは JVM ボットと同じくらいクッキーが大好きで、お腹が空いていました!

彼らは JVM ボットのクッキーをむさぼり始め、あちこちに噛みつきました。グレムリンがクッキーを食べたとき、JVM ボットの freeMemory インジケーターが急速に低下し始めました!

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

「いやぁ!」 JVM ボットはロボットの頭をこすりながら叫びました。 「このグレムリンがクッキーを食べすぎると、ジャワランドの残りの部分に十分なクッキーが残らなくなるでしょう!」

グレムリンの食欲を測定する

JVM ボットには素晴らしいアイデアがあります。彼は記憶メーターを使って、グレムリンがクッキーを何枚食べるかを調べます。

JVM ボットはまず freeMemory を調べて、グレムリンが食べ始める前に残っている Cookie の数を確認しました。

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

ログイン後にコピー

それから彼は言いました、「わかった、グレムリン、何ができるかやってみよう!」そしてクッキーを噛みちぎりながら自由に走らせましょう。

グレムリンが食べた後、JVM ボットは再度 freeMemory をチェックしました。

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

ログイン後にコピー

最後に、JVM ボットは欠落している Cookie の数を計算するために計算を行いました。それはグレムリンが飲み込んだ記憶だった!

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

ログイン後にコピー

スーパー メモリ インジケーター JVM ボット!

すべてを追跡するために、JVM ボットは自身にメモリ インジケーターを構築しました。それは色付きのセクションが付いたクッキーの瓶のように見えました:

すでに食べられたクッキーは緑色 (メモリ使用済み)。
青色は瓶の中にまだ安全に残っているクッキー (空きメモリ)。
グレーは焼くことのないクッキー (最大メモリ)。
このようにして、JVM ボットはすべてを監視し、さらにクッキーを焼く時期が来たことを知らせることができます!

大きな赤いボタン「GC」 - JVM ボットの秘密兵器!

Java и Тайна Исчезающей Памяти!
そして最後に、JVM ボットには 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 ボットからのヒント: メモリ グレムリンを制御する方法!

メモリを安全に保つために、JVM ボットにはいくつかのトリックがあります:

  • 余分なパン粉を避けるため、測定前に GC ボタンを押してください。測定前にゴミを取り除くと、より正確な結果が得られます。もちろん、これは必ずしも必要というわけではありませんが、測定の精度を高めるのに役立ちます。

  • あまり頻繁に測定しないでください。 JVM ボットは、本当に必要な場合にのみ測定します (ループでの測定は避けてください)。そうしないと、インジケーターが消耗する可能性があります。ランタイムを通じてメモリに頻繁にアクセスすると、わずかな遅延が発生する可能性があります。代わりに、アルゴリズムの開始時と終了時に単一の測定を実行します。

  • 誰もが理解できるように、メガバイト (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 ボットは Java Land のヒーローとなり、どれだけ多くのグレムリンがそれを食べようとしても、みんなのクッキー (またはメモリ) を守りました。覚えておいてください: JVM ボットとそのメモリ インジケーターを使用すると、Java Land の全員に十分な Cookie が常に存在します。 ?

以上がJavaと消えた記憶の謎!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート