Java プログラムでよく使用されるメモリ モジュールは何ですか?

Java プログラムでよく使用されるメモリ モジュールは何ですか?

序文

コードを書くときは通常、コードとオブジェクト間のフローに重点を置きます。しかし実際のところ、Java プログラムの実行中にクラス、オブジェクト、ローカル変数、メソッド呼び出しチェーンがどこに保存されるかについて真剣に注意を払ったことがあるでしょうか?

[[286800]]

JVM メモリ

ご存知のとおり、Java プログラムは JVM 仮想マシンで実行されます。数多くの JVM 仮想マシンの中で、HotSpot VM は最も人気のある、または最も使用されている JVM バージョンです。 HotSpot VM では、仮想マシンのメモリ全体が複数のモジュールに分割されています。

  • ヒープ
  • 方法領域
  • プログラムカウンタレジスタ
  • JVM スタック
  • ネイティブメソッドスタック

ヒープ

この領域には、通常、新しく作成されたオブジェクトが保存されます。この領域は、私たちが普段最も接触する領域でもあります。これは、私たちが通常注目する 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) などのサードパーティのオフヒープ キャッシュ管理パッケージを使用して操作することができます。

<<:  ロックの基本概念からRedis分散ロックの実装まで

>>:  EduSoho ユーザー カンファレンスは「教育の未来」に焦点を当て、オンライン教育を強化する 4 つの新製品をリリースしました。

推薦する

フリーライダーを拒否しますか? !ユーザーの成長に役立つミニプログラム分裂に関する 6 つのヒント

月給5,000~50,000のこれらのプロジェクトはあなたの将来です私たちは長年、PCトラフィックの...

低学歴のギャングが百度のプロモーションアカウントに簡単に侵入し、100件以上の詐欺行為を行った

原題:百度のプロモーションアカウントへのハッキングによる詐欺事件が100件以上発生北京ニュース(記者...

「セグメンテーション」を使用して、製品トラフィックに影響を与える潜在的な要因を見つけます

多くの友人から、データを使ってマーケティング分析をする方法について何か書いてほしいと頼まれました。皆...

優れたプロダクトマネージャーになるには?インターネットには「現場力」が必要

数年の職務経験を持つ現在のプロダクトマネージャーたちの間で、「人間の言語を話さない」という現象に気づ...

アマゾンの大規模なクラウドコンピューティングの注文は中止された。 IBM と Oracle は利益を得ることができるでしょうか?

国防総省がアマゾンとの100億ドルの契約を延期したことは、マイクロソフト、IBM、オラクルにとって朗...

企業はクラウドに移行し、デジタル経済に新たな勢いを生み出している

1.0 が企業が自社のコンピュータ ルームからクラウドにビジネス プロセスを移行することであるならば...

Zynga の悩み: Facebook のゲーム プラットフォームは取り残されるのか?

北京時間2月26日、外国メディアの報道によると、市場調査会社IHSはブログ投稿で、ソーシャルネットワ...

A5ウェブマスターネットワークB2Bウェブサイト運営研修体験共有

A5 Webmaster Networkの第2回B2Bウェブサイト運用研修に参加して、とても興奮し、...

AMD、クラウドコンピューティングとハイパースケールデータセンター向けに設計されたOpteron 4000シリーズプラットフォームを発表

—コアあたりの消費電力が史上最低¹のサーバープロセッサーで、優れたコスト効率とプラットフォームの柔軟...

ウェブサイトデザインの楽しさを徹底解説:ユーザーを惹きつけ、ウェブサイトの定着率を高める

Web デザイナー兼開発者として、私たちが設計するすべてのプロジェクトには特定の目標と要件があります...

マクドナルドが高額なテイクアウトボックスを発売、ブランドマーケティングの策略か?

大手ブランドの奇妙な国境を越えた現象から、その背後にあるブランドコミュニケーションの方法が変化し、反...

数秒で新しいウェブサイトをBaiduに掲載するための代替方法

最近、中国のウェブマスターフォーラムを閲覧していたところ、多くの初心者ウェブマスターが解決が難しい問...

インターネットの伝説:ジャック・マーへの投資を逃した人々

【要点】今日のインターネット業界の競争者であり、資金ハンターである馬化騰は、かつてアリババに投資する...

SEO 業界でウェブサイトをフレーム化する 2 つの恥知らずな方法を明らかにする

どの業界でも、競合他社を陥れるために恥ずべき方法を使う人が必ず存在しますが、SEO 業界でも同じこと...

Tuanbao.comは3月に債務のため閉鎖された後、再開したが、未払い金が残っている

未払い債務のため3月に閉鎖したTuanbao.comは昨日再開を発表した。 Tuanbao.comの...