3G の開始ヒープ サイズ (-Xms3072m VM 引数で設定) で Java プログラムを実行すると、JVM はそのサイズで開始しません。400m 程度から開始し、必要に応じてさらにメモリを取得し続けます。
これは私にとって深刻な問題です。しばらくすると、JVMが上記の量を必要とすることを私は知っています。また、必要に応じて JVM のメモリが増加すると、速度が低下します。JVM がより多くのメモリを取得する間、かなりの時間がガベージ コレクションに費やされます。そして、メモリの獲得は高価な作業だと思います。
JVM が実際に開始ヒープ サイズ パラメータを尊重していることを確認するにはどうすればよいですか?
更新:このアプリケーションは多くのオブジェクトを作成しますが、そのほとんどはすぐに死んでしまいます。結果として得られるオブジェクトの一部は、メモリ内に保持する必要があります (若いヒープから転送されます)。この操作中、これらのオブジェクトはすべてメモリ内にある必要があります。操作後、若いヒープ内のすべてのオブジェクトが正常に要求されていることがわかります。したがって、メモリリークはありません。
ヒープサイズが 3G に達すると、同じ操作がスムーズに実行されます。これは、必要な余分な時間がメモリの取得に費やされていることを明確に示しています。
このSun JDK 5.