Javaの「共有オブジェクトメモリ」と「ヒープメモリ」の違いは何ですか? 「共有オブジェクトメモリ」は「ヒープメモリ」のスーパーセットのようなものですか?
この質問のソースは、jmap のドキュメントです。「共有オブジェクトメモリ」と「ヒープメモリ」を印刷するためのさまざまなオプションを提供します。
Javaの「共有オブジェクトメモリ」と「ヒープメモリ」の違いは何ですか? 「共有オブジェクトメモリ」は「ヒープメモリ」のスーパーセットのようなものですか?
この質問のソースは、jmap のドキュメントです。「共有オブジェクトメモリ」と「ヒープメモリ」を印刷するためのさまざまなオプションを提供します。
Javaメモリ(Java 8まで)は3つの部分で構成されています。
すべてのクラスインスタンスのメモリは、ヒープから割り当てられます。非ヒープメモリは、主にクラスローダーがクラス関連のデータを格納するために使用します。
共有オブジェクトに関する詳細は次のとおりです。共有オブジェクトファイルとは何ですか。。
これまでの私の分析から:
デフォルトのオプションでは、以下を含むすべてのメモリ情報が出力されます。
この分析は、以下に基づいている場合:
JDK ドキュメントでは、デフォルト オプション (「共有オブジェクト メモリ」) が Solaris の pmap コマンドに似ていることが言及されています。pmap コマンドを見ると、完全なメモリ情報が出力されているようです。
この理解を確認するためにコメントを追加してください。
共有オブジェクト メモリは、頻繁にアクセスされる Java ライブラリのクラスがメモリ マップされる場所であり、rt.jar からロードするよりも高速にロードできます。これにはComparable
、String
、Object
などの一般的に使用される多くのクラスが含まれます。要求されたクラス ファイルが共有オブジェクト メモリで使用できない場合は、rt.jar から要求されます。これは、さまざまな Java プログラムで頻繁に使用されるクラスをキャッシュするものと考えることができます。