序文 コードを書くときは通常、コードとオブジェクト間のフローに重点を置きます。しかし実際のところ、Java プログラムの実行中にクラス、オブジェクト、ローカル変数、メソッド呼び出しチェーンがどこに保存されるかについて真剣に注意を払ったことがあるでしょうか?
JVM メモリ ご存知のとおり、Java プログラムは JVM 仮想マシンで実行されます。数多くの JVM 仮想マシンの中で、HotSpot VM は最も人気のある、または最も使用されている JVM バージョンです。 HotSpot VM では、仮想マシンのメモリ全体が複数のモジュールに分割されています。
ヒープ この領域には、通常、新しく作成されたオブジェクトが保存されます。この領域は、私たちが普段最も接触する領域でもあります。これは、私たちが通常注目する YGC と FGC である Young Generation と Old Generation に細分化されます。若い世代はさらに、エデン、サバイバーから、サバイバーへという 3 つの領域に分かれています。 YGC には、これら 3 つの領域を対象としたガベージ コレクション アルゴリズムを実行するためのさまざまなアルゴリズムがあります。ここではこれについては議論しません。興味があれば、面接官に問い合わせて、「JAVA GC ガベージ コレクション メカニズム」についてはこれ以上質問しないでください。 この領域はすべてのスレッドで共有され、主要なビジネス オブジェクトを格納するため、スペースは比較的大きくなります。通常、最小ヒープ サイズを設定するには -Xms を使用し、最大ヒープ サイズを設定するには -Xmx を使用します。 方法領域 メソッド領域には、スレッド共有、不連続メモリ、拡張可能、ガベージコレクション可能など、先ほど説明したスタック領域との多くの類似点があります。同様に、展開できなくなった場合は、OutOfMemoryError 例外がスローされます。メソッド領域は、非ヒープ領域とも呼ばれます。これをオフヒープメモリ領域から分離する必要があることに注意してください。 メソッド領域には、仮想マシンによってロードされたクラス情報、定数、静的変数、ジャストインタイムコンパイラによってコンパイルされたコードなどのデータが格納されます。これは、実行時に生成されるオブジェクトとは異なる、マテリアルの固定されたストレージ領域です。 メソッド領域のメモリリサイクル対象は、主に定数プールのリサイクルと型のアンロードです。一般的に言えば、この地域のリサイクルの「成果」は満足できるものになりにくく、特に種類の荷降ろしでは条件がかなり厳しいですが、リサイクルは確かに必要です。 プログラムカウンタレジスタ プログラム カウンターの機能は、現在のスレッドによって実行されたバイトコードの行番号のインジケーターと見なすことができます。バイトコード インタープリタが動作する場合、カウンターの値を変更して次のバイトコード命令を選択します。これらのうち、分岐、ループ、ジャンプ、例外処理、スレッド回復などの基本的な機能はすべて、完了するためにカウンターを使用する必要があります。 Java 仮想マシンのマルチスレッド化は、スレッドを順番に切り替えてプロセッサ実行時間を割り当てることによって実現されます。特定の瞬間に、プロセッサ (マルチコア プロセッサの場合はコア) は 1 つのスレッド内の命令のみを実行します。各スレッドの特定の処理ステップを保存する場所が必要であり、この領域がそれを行います。 JVM スタック アセンブリ言語を学んだことがある学生にとっては、その機能を理解しやすくなるかもしれません。スレッド呼び出しメソッドモデルを記録するスタックです。各スレッドには独自の仮想マシン スタックがあるため、対応するスレッドと生死も共有します。 各メソッド モデルはスタック フレームと呼ばれ、ローカル変数テーブル、操作スタック、動的リンク、メソッド戻りアドレスの 4 つの属性が格納されます。 ps: ローカル変数の場合、変数が基本型であればスタック フレームには対応する値が直接格納されますが、高度な型であれば値への参照のみが格納されます。 ネイティブメソッドスタック これは仮想マシン スタックと同様に機能し、StackOverflowError および OutOfMemoryError 例外もスローします。 違いは、仮想マシン スタックは仮想マシンに Java メソッド (バイトコード) の実行を提供するのに対し、ローカル メソッド スタックは仮想マシンが使用するネイティブ メソッドを提供するという点です。 JVM のメモリについては、比較と理解を助けるために次のような図でまとめることができます。 オフヒープメモリ JVM メモリとは異なり、Java でもオフヒープ メモリがよく使用されます。 JVM メモリには非常に完全なガベージ管理メカニズムがあり、開発者はメモリ リソースのリサイクルを気にすることなく自由に開発できますが、一連の非常に複雑で洗練されたガベージ管理アルゴリズムが存在するため、高同時実行性 (特にメモリ書き込みが多い場合) では YGC と FGC が頻繁に発生し (GC ごとにプログラムがフリーズします)、パフォーマンスのボトルネックの一因となります。 このようなビジネス状況では、通常、オフヒープ メモリを使用してパフォーマンス レベルを向上させます。オフヒープ メモリは、実際には JVM の管理外にある物理マシン メモリです。これは JVM によって管理されないため、当然ながら JVM の GC アルゴリズムはなく、より優れたスケーラビリティと IO 速度が得られます。 JAVA では、Unsafe および NIO パッケージの ByteBuffer を使用してオフヒープ メモリを操作するか、ohc (off-heap-cache) などのサードパーティのオフヒープ キャッシュ管理パッケージを使用して操作することができます。 |
>>: EduSoho ユーザー カンファレンスは「教育の未来」に焦点を当て、オンライン教育を強化する 4 つの新製品をリリースしました。
エッジ コンピューティングは、産業企業にとって基盤となるテクノロジーであり、低レイテンシ、強力なセキ...
Cloudserver は現在、米国東海岸のバッファロー データ センターで、最低 4G のメモリと...
Jindouyun (jdouu) の活動: 米国サンノゼの双方向 cn2 gia 回線、50Mbp...
[中国、深セン、2020年5月15日] HUAWEI CLOUDは本日、政府および企業向け戦略を発表...
クラウド コンピューティングは、クラウド コンピューティングとは何かという最初の議論から、クラウド ...
電子商取引サイトの場合、主なオンライン マーケティング手法は検索エンジン マーケティングです。検索エ...
著者は、数年間、企業のウェブサイトのインターネット マーケティングに携わってきました。著者が従来の企...
1. Java仮想マシンのメモリ領域の概要プログラムを作成するときに、OOM (メモリ不足) やメモ...
今から 9 月 5 日まで、raksmart はすべての VPS を大幅値下げいたします。 (1) ...
みなさんこんにちは。私は恵州SEOの葉建輝です。最近、会社では新しい同僚を採用し、そのうちの 1 人...
Hostodo はプロモーションを行っており、特別価格の KVM 仮想 VPS モデルのいくつかの価...
エアタスカーウェブサイトアドレス: https://www.airtasker.com/ウェブサイト...
エンタープライズ Web サイトの最適化: 検索ボリュームは大きいが競争は少ないキーワードを見つける...
画像提供:新華社9月2日から9月7日まで、中華人民共和国商務省と北京市人民政府が共催する2021年中...
これまでの製品発表と同様に、羅永浩のエイプリルフールの最初のライブストリーミング番組はさまざまな分野...