3

jvm内からjvm引数を変更する方法はありますか? 具体的には、jvm の最大ヒープ サイズを内部から変更できるようにしたいと考えています。これは可能ですか?

編集:これをやりたかった理由を追加する必要があると思います。さまざまなマシン/プラットフォームで実行される Java プログラムがいくつかあります。これらのプログラムには、実行時に供給される構成があり、プログラムが実行されているマシン/環境によって異なります。これらの構成の一部は実行時に変更でき、さまざまなプログラムは構成が変更されると自動的に更新されます。

残りの構成と同様に、実行時に供給されるこれらの構成パラメーターの 1 つにヒープ サイズを指定したかったのです。もしそうなら、プログラムは(いくつかのデフォルトのjvm引数で)起動し、取得した設定に基づいて自分自身を調整することができます.

4

7 に答える 7

6

これは中途半端で、完全に的外れなハックの考え方です。

...現在の jvm から (新しい設定で) Java の新しいインスタンスを生成し、新しいプロセスから古いプロセスを強制終了した場合はどうなりますか? これが役立つかどうか(または機能するかどうか)はわかりません...

于 2009-02-05T04:08:05.053 に答える
3

システムのセキュリティが損なわれるという理由だけで、これらのオプションを変更することはできません。

管理者がセキュリティ マネージャーを設定して、特定のプログラムに特定の機能のみを許可したい場合、それを無効にできるとしたら、深刻な問題になります。

とにかく、プログラムは実行時にメモリ要件などを変更するべきではありません。これらは管理者が認識して設定する必要があります。プログラムが実行時にこれを行う必要がある理由はありません。本当にこれを変更する必要がある場合、おそらくその理由は、管理者タイプの男がそれをしないのはなぜですか?

于 2009-02-05T04:13:48.273 に答える
2

具体的には、jvm の最大ヒープ サイズを内部から変更できるようにしたいと考えています。これは可能ですか?

いいえ。

于 2009-02-05T04:03:16.937 に答える
1

(数年後)、私が投稿した時点で必要なものを実現するライブラリを見つけました。 Akumaは、Java プロセスをデーモン化するためのライブラリです。新しい引数で JVM を再起動できます。

これを使用することと、ブートストラップで新しいプロセスを起動することの違いは、stdin/stdout およびその他のファイル記述子が自動的に共有されることです。

于 2014-06-06T17:18:22.137 に答える
0

たとえば、 -Xmx を動的に設定すると、長時間実行されるランタイムの投影されたシステム リソース (主にフットプリント) を制御するのに非常に役立ちます。もちろん、多くの影響の 1 つは、GC オーバーヘッドが大きく/長くなることです。

私は、何十もの 1G+ ヒープ JVM を実行しているいくつかの大規模なサーバー マシンを知っています。これらのランタイムで、使用率の低い時間帯に最高水準点を縮小できれば、システム リソースをより適切に管理できます。

于 2009-10-30T22:20:26.767 に答える
0

他の人が指摘したように、これは通常、適切なパラメーターでメイン JVM を呼び出すブートストラップ プログラム (Java またはその他の言語) を使用することによってのみ可能です。

そうは言っても、これが必要だと確信していますか?「最大ヒープサイズ」について言及しています。-Xmx パラメータについて言及している場合: これは、VM が超えることのない単なる制限です。VM が実際にそれほど多く使用するという意味ではなく、可能であればより少ない量で済みます。

したがって、常に -Xmx をシステムが処理できる最大値に設定し、JVM に実際に必要な量を決定させることができます。なぜ動的に設定する必要があると思いますか?

于 2009-04-15T09:09:50.907 に答える