2

16 コア CPU で単純なスタンドアロン Java プログラムを使用して、いくつかの JNI 呼び出しをテストしています。私は 64 ビット JVM を使用しており、OS は Linux AS5 です。しかし、64 ビットの C++ ライブラリを使用してテスト プログラムを開始するとすぐに、[サイズ] 列に 16G が表示されます。トップ コマンドの出力は次のようになります。

  PID PSID ユーザー名 THR PRI NICE サイズ RES 状態 時間 CPU コマンド
  3505 31483 xxxxxxx 23 16 0    16G 215Mスリープ   0:02    0.00% java    

ヒープが問題ないことは理解していますが、JNI メモリによってプロセス サイズが増加する可能性がありますが、16G で始まる理由について混乱しています。それは本当に多くのメモリを消費していますか?私はそれを気にする必要がありますか?

4

2 に答える 2

0

Greg Hewgillのコメントは、基本的にすべてを示しています。使用しているのは215MBの実メモリのみです。私のマシンでは、VM引数のない何もしないJavaプロセスは8GBを取得します。コアの数は4倍なので、2倍のメモリから始めるのは理にかなっています。

この番号は、2 * 48Bまたは2 *64 Bのような仮想アドレス空間しか使用しないため、実際には無料です。-mx1Gメモリを1GBに制限するために使用できますが、これは厳しい制限であり、プロセスがさらに必要になるとOOMEを取得することに注意してください。

于 2012-11-02T04:49:01.720 に答える
0

奇妙ですが、JNI 呼び出しがどういうわけか急速にメモリをリークしているか、多数の大量のメモリ チャンクを割り当てている可能性があります。JVM を起動するためにどのコマンド ラインを使用していますか?また、JNI コードは何を実行していますか?

于 2012-04-30T03:12:25.780 に答える