26

JVM が既にロード (実行) された後で VM パラメーターを変更/修正/追加することは可能ですか? もしそうなら、どうすればいいですか?

4

2 に答える 2

41

コマンド ラインのフラグを介して設定するプロパティについては、 System.setProperty-Dが必要です。例えば:

System.setProperty("propname", "hello world");

// ... later ...
String value = System.getProperty("propname");

アップデート:

デバッグを動的に有効にすることはできませんが、起動時にデバッグを有効にして、後でデバッガーをアタッチすることはできます。以下を使用すると、ポート 12345 でリッスンし、すぐにプログラムの実行を開始できます ( 経由suspend=n)。その後、必要に応じてデバッガーをアタッチしたり、デバッガーをデタッチしたり、後で再度アタッチしたりできます。

-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=12345

もちろん、これはデバッガーが接続されていない場合でもパフォーマンスを低下させるため、本番環境ではなく、開発/テスト コードでのみうまく機能します。そのためには、 log4jなどのロギングが必要です。

于 2009-11-18T06:57:32.990 に答える
4

簡単に言えば、実行時に VM パラメーターを変更することはできません。ランタイム クラスは、最大メモリなどのいくつかのオプションを公開します。最大メモリなどの主なパラメータは、マシン上に複数の JVM が共存する場合にリソースを管理できる管理者タイプによってのみ設定する必要があります。1 つの JVM が貪欲になり、割り当てられた以上の量を要求することを許可すると、この制約が失われます。

于 2009-11-18T06:57:41.357 に答える