ホームページ  >  記事  >  Java  >  Java ヒープ メモリの 10 の重要なポイントを共有する

Java ヒープ メモリの 10 の重要なポイントを共有する

Y2J
Y2Jオリジナル
2017-04-26 10:11:231213ブラウズ

この記事は、Java ヒープ メモリの 10 の重要なポイントを詳細に分析して紹介したものです。必要な方は参考にしてください。

Java ヒープ メモリの 10 点。
javaoutofmemoryerrorgenerationjvmprofiler プログラミング Java プログラミングを学び始めたとき、私はヒープ メモリやヒープ領域が何なのかを知りませんでした。オブジェクトが作成されたときにオブジェクトがどこに配置されるのかさえ知りませんでした。 。正式なプログラムを書き始めたとき、よく java.lang.outOfMemoryError エラーに遭遇し、それからヒープ メモリやヒープ領域とは何かに注意を払い始めました。ほとんどのプログラマーはこのプロセスを経験したことがあります。言語を学ぶのは非常に簡単ですが、プログラミングの基本をすべて学び、プログラミングの秘密を発見するための特別なプロセスがないため、基本を学ぶのは非常に困難です。
プログラマにとって、ヒープ領域を知り、ヒープ領域を設定し、ヒープ領域内の outOfMemoryError エラーを処理し、ヒープ ダンプを分析することは非常に重要です。 Java ヒープに関するこのチュートリアルは、プログラミングを学び始めたばかりの弟のためのものです。もちろん、基本を知っている場合や、内部で何が起こっているのかを知っている場合は、それほど役に立たないかもしれません。オブジェクトがヒープ内に作成されることを知らなければ、ヒープ領域で OutOfMemoryError が発生することに気づかないでしょう。私はヒープについて私が知っているすべてを書き留めようと最善を尽くしました。他の人がその恩恵を受けることができるように、皆さんができる限り知識に貢献し、共有できることを願っています。
Javaのヒープスペースとは何ですか?
Java プログラムの実行が開始されると、JVM はオペレーティング システムからメモリを取得します。 JVM はこのメモリを使用し、このメモリの一部はヒープ メモリです。ヒープ メモリは通常、ストレージ アドレスの一番下にあり、上に配置されます。 new キーワードまたはその他の方法を使用してオブジェクトが作成されると、オブジェクトはヒープからメモリを取得します。オブジェクトが使用されなくなり、ガベージとして収集されると、メモリはヒープ メモリに戻されます。ガベージ コレクションについて詳しくは、「Java でのガベージ コレクションの仕組み」を参照してください。
Java ヒープ領域を増やす方法
ほとんどの 32 ビット マシンおよび Sun の JVM では、Java ヒープ領域のデフォルト サイズは 128MB ですが、32 ビット Solaris オペレーティング システム (SPARC プラットフォーム バージョン) などの例外もあります。 ) の場合、デフォルトの最大ヒープ領域と開始ヒープ領域サイズは -Xms=3670K および -Xmx=64M です。ただし、スループット ガベージ コレクターを使用すると、一般的なヒープ領域サイズは約 30% 増加します。 Java 1.5、デフォルト 最大ヒープ サイズは物理メモリの 4 分の 1、開始ヒープ サイズは物理メモリの 16 分の 1 です。デフォルトのヒープ サイズを知るには、デフォルトの設定パラメータでプログラムを開き、JConsole (JDK 1.5 以降でサポート) を使用して表示できます。最大ヒープ サイズは、[VM の概要] ページで確認できます。
この方法を使用すると、プログラムのニーズに応じてヒープ メモリ サイズを変更できます。デフォルト値の代わりにこの方法を強くお勧めします。プログラムが大きく、作成する必要のあるオブジェクトが多数ある場合は、2 つのパラメーター -Xms および -Xmx を使用してヒープ メモリのサイズを変更できます。 Xms は開始ヒープ メモリ サイズを表し、Xmx は最大ヒープ メモリ サイズを表します。また、新しい世代のサイズを示すパラメーター -Xmn もあります (後述)。注意する必要があるのは、ヒープ メモリ サイズを任意に変更することはできず、JVM の起動時にのみ設定できることです。
ヒープとガベージ コレクション
オブジェクトはヒープ メモリに作成されることはわかっていますが、ガベージ コレクションは、ヒープ領域から死んだオブジェクトを削除し、メモリをヒープに戻すプロセスです。ガベージ コレクターが使用するために、ヒープは主に New Generation、Old Generation、または Tenured Generation と呼ばれる 3 つの領域に分割されます。New Generation は、新しく作成されたオブジェクトを格納するために使用される領域であり、オブジェクトが作成されるときに使用されます。作成した。 。長期間使用されている場合は、ガベージ コレクターによって古い世代 (または Tenured 世代) に移動されます。パーマスペースは、JVM がクラス、メソッド、文字列プール、クラスレベルの詳細などのメタデータを保存する場所です。ヒープとガベージ コレクションの詳細については、「How Garbage Collection Works in Java」を参照してください。
Java ヒープの OutOfMemoryError
JVM が起動すると、-Xms パラメーターで設定されたメモリが使用されます。プログラムが続行し、さらに多くのオブジェクトが作成されると、JVM はより多くのオブジェクトを収容できるようにヒープ メモリの拡張を開始します。 JVM はメモリを再利用するためにガベージ コレクターも使用します。 -Xmx で設定された最大ヒープ メモリにほぼ達したとき、新しいオブジェクトにそれ以上メモリを割り当てることができない場合、JVM は java.lang.outofmemoryerror をスローし、プログラムがクラッシュします。 OutOfMemoryError をスローする前に、JVM はガベージ コレクターを使用して十分なスペースを解放しようとしますが、それでも十分なスペースがないことが判明すると、このエラーがスローされます。この問題を解決するには、作成したオブジェクト、各オブジェクトが占めるスペースなど、プログラム オブジェクトに関する情報を知る必要があります。プロファイラーまたはヒープ アナライザーを使用して、OutOfMemoryError エラーを処理できます。 「java.lang.OutOfMemoryError: Java heap space」は、ヒープに十分な領域がなく、拡張を続けることができないことを意味します。 「java.lang.OutOfMemoryError: PermGen space」は、永続世代がいっぱいで、プログラムをクラスにロードしたり、文字列を割り当てたりすることができなくなったことを意味します。
Java ヒープ ダンプ
ヒープ ダンプは、特定の時点での Java ヒープ メモリのスナップショットです。これは、ヒープ メモリを分析したり、メモリ リークや Java.lang.outofmemoryerror エラーに対処したりする場合に非常に役立ちます。 JDK には、ヒープ ダンプの取得に役立つツールがいくつかあり、ヒープ ダンプの分析に役立つヒープ分析ツールもいくつかあります。「jmap」を使用してヒープ ダンプを取得すると、ヒープ ダンプ ファイルの作成に役立ちます。次に、「 jhat 」 (ヒープ分析ツール) を使用して、これらのヒープ ダンプを分析できます。
Java ヒープ メモリの 10 つの重要なポイント:
1. Java ヒープ メモリは、オペレーティング システムによって JVM に割り当てられるメモリの一部です。システム。
2. オブジェクトを作成すると、それらは Java ヒープ メモリに保存されます。
3. ガベージ コレクションを容易にするために、Java ヒープ スペースは、New Generation、Old Generation または Tenured Generation、および Perm Space と呼ばれる 3 つの領域に分割されます。
4. JVM コマンド ライン オプション -Xms、-Xmx を使用できます。 , -Xmn を使用して Java ヒープ領域のサイズを調整します。サイズの後に単位を示す「M」または「G」を忘れずに付けてください。たとえば、-Xmx256m を使用してヒープ メモリの最大サイズを 256MB に設定できます。
5. JConsole または Runtime.maxMemory()、Runtime.totalMemory()、Runtime.freeMemory() を使用してヒープ メモリを表示できます。 Javaのサイズ。
6. コマンド「jmap」を使用してヒープダ​​ンプを取得し、「jhat」を使用してヒープダ​​ンプを分析できます。
7. Java ヒープスペースは、コールスタックとローカルを保存するために使用されます。変数。
8. Java ガベージ コレクターは、デッド オブジェクト (使用されなくなったオブジェクト) によって占有されていたメモリを回収し、Java ヒープ領域に解放するために使用されます。
9. java.lang.outOfMemoryError が発生した場合は、ヒープ領域を増やすだけで十分な場合もありますが、頻繁に発生する場合は、Java プログラムにメモリ リークがあるかどうかを確認する必要があります。
10. プロファイラーとヒープダンプ分析ツールを使用して、各オブジェクトに割り当てられているメモリの量を確認してください。

以上がJava ヒープ メモリの 10 の重要なポイントを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。