web-dev-qa-db-ja.com

実行時のJVMパラメータの設定

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

24
Guy

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

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

39
Harold L

短い答えは、実行時にVMパラメータを変更できないことです。Runtimeクラスは、最大メモリなどのいくつかのオプションを公開します。最大メモリなどのメインパラメータは、管理を許可する管理者タイプによってのみ設定する必要がありますマシン上に複数のJVMが共存している場合のリソースの制限。

4
mP.