私はJavaプロセスを実行しています。これは、jconsoleごとにヒープメモリが150MBと表示されますが、同じプロセスでは、ubuntuのおよそのシステムモニタです。 470 MB。また、クラスパスのjarファイルのサイズを調べると、約200 MBになります。Javaで、ヒープメモリとシステムメモリ
クラスパスに存在するすべてのjarがその特定のプロセスのためにJVMに読み込まれると考えています。
ご理解いただけますようお願いいたします。 ...私は何かに行方不明ですか?
私はJavaプロセスを実行しています。これは、jconsoleごとにヒープメモリが150MBと表示されますが、同じプロセスでは、ubuntuのおよそのシステムモニタです。 470 MB。また、クラスパスのjarファイルのサイズを調べると、約200 MBになります。Javaで、ヒープメモリとシステムメモリ
クラスパスに存在するすべてのjarがその特定のプロセスのためにJVMに読み込まれると考えています。
ご理解いただけますようお願いいたします。 ...私は何かに行方不明ですか?
Ubuntuのシステムマネージャは、JRE(Java Runtime Environment)が占めるメモリを完全に表示します。 JREには、スタックメモリ(ネイティブ& Javaスタック)、コードメモリ(Javaクラスとコードが存在する)、ヒープメモリなどの他のメモリが含まれています。したがって、JConsoleがメモリマネージャによって表示されるものより常に少なくなるヒープメモリ。さらに、JREは、OSとは独立した独自のメモリを管理します。したがって、すでにOSからより多くのメモリを取得している可能性がありますが、あなたのプログラムは現在のところメモリを必要としません。したがって、次回のプログラムではより多くのメモリが必要になるたびに、より多くのメモリを要求するためにOSに行く必要はありません。 OSからより多くのメモリを要求するシステムコールは高価です。
あなたのJAR読み込みの質問に来ています。クラスパスに存在するすべてのjarファイルは、必ずしもJREによって読み込まれるとは限りません。彼らは要求に応じてロードされます。したがって、クラスパスには100個のJarファイルがありますが、1個のJarファイルには2つのクラスしかロードされません。したがって、これら2つのクラスはメモリにロードされます。
さらに洗練されたメモリ解析を行うために、いくつかのプラグインに付属するJVisualVMを使用して、プログラム内のメモリを分析することをお勧めします。
(プロセスがイベントトリガーされている)これに加えて、私のプロセスがアイドル状態(つまり、イベントなし)で "システムモニター"のシステムメモリが増加する。なぜ理解できないのですか? – Rajas
これははるかに複雑です。 –
JARはヒープにロードされません。 –
上記の質問の更新 – Rajas