Javaアプリケーションの内部からJavaアプリケーションのメモリを制限できますか?

StackOverflow https://stackoverflow.com/questions/19855486

質問

JVM引数を使用して、JVMヒープなどに割り当てられたメモリを制限できます。

プログラムを実行するときにコマンドラインにJVM引数を追加する代わりに、開発時間中にJavaプログラム内でこれらの値をハードコード化できるかどうかを知りたいと思います。出来ますか?

役に立ちましたか?

解決

私の最初の質問は、なぜあなたはそれを設定しているのですか?サーバーJVMは、メインメモリサイズの最大1/4に設定し、これはほとんどのアプリケーションにとって合理的です。 JVMを所有する構築によってこれを変更するか、次のようなエイリアスを作成することができます

alias java="java -Xmx30g"

できることは、メモリの使用量を定期的に確認し、さらに使用するとプロセスを殺すことです。もちろん、これは非常に悪い考えです。

代わりに、あなたができることは、同じ引数で再びプログラムを実行することですが、必要な最大ヒープサイズで。つまり、runtime.execができます。

起動時に最大メモリサイズを留保するため、変更できません。

ところで、ヒープが重要な唯一の記憶であるという一般的な誤解があります。これは、JVM、スレッドスタック、ネイティブメモリなどがすべてメモリを使用しているため、ヒープを100 MBにすることができますが、JVMは300 MBを使用できます。

他のヒント

実行時にヒープサイズを変更しようとしていますか? JVMが起動してから変更できないときに、ヒープサイズの値を設定する必要があるため、これを行うことはできません。

いいえ、これはできません。できることはすべて、コマンドラインに引数を追加してヒープサイズを管理することです。

汚れた解決策は、さまざまなヒープサイズの別のプロセスを生み出すことですが、これがあなたが探しているものだとは思いません。 ここ 例があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top