2009-11-18 22 views

Antwort

34

Für Eigenschaften, die Sie über das Flag -D in der Befehlszeile festlegen, möchten Sie System.setProperty. Zum Beispiel:

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

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

Update:

Sie können nicht aktivieren dynamisch Debuggen, aber Sie können das Debuggen beim Start ermöglichen aber einen Debugger später befestigen. Mit den folgenden Funktionen können Sie den Port 12345 abhören und das Programm sofort starten (über suspend=n). Dann können Sie einen Debugger anhängen, wenn/falls es nötig ist, den Debugger zu trennen, es später erneut befestigen usw.

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

Natürlich schmerzt diese Leistung auch dann, wenn der Debugger nicht angebracht ist, so dass nur es funktioniert gut in dev/test code, nicht production. Dafür möchten Sie protokollieren, z.B. log4j.

+0

Was ist mit -X Nicht-Standard-Optionen? vor allem -Xdebug und einige andere Debugging-Flags? – Guy

+0

Ich habe ein Update mit Debugging-Informationen hinzugefügt. –

+0

Danke dir Harold! – Guy

3

Eine kurze Antwort ist, dass Sie VM-Parameter zur Laufzeit nicht ändern können. Die Runtime-Klasse bietet einige Optionen wie max Speicher. Die Hauptparameter wie maximaler Speicher sollten nur durch einen Admin-Typ festgelegt werden, der die Verwaltung von Ressourcen ermöglicht, wenn mehrere JVMs auf einem Computer vorhanden sind. Wenn man es einer JVM erlaubt, gierig zu werden und viel mehr zu fragen, als sie zugeteilt wurde, würde diese Einschränkung aufgehoben werden.

+0

Die java.lang.Runtime-Klasse kann Ihnen die maximale Speichereinstellung mitteilen, sie kann jedoch nicht geändert werden. – tgdavies

+0

@tdavies Ich weiß, und ich gab den Grund, warum dieser Wert unveränderlich ist. –

+7

-1 Es ist möglich, VM-Parameter eine Laufzeit zu ändern! Sehen Sie sich 'com.sun.management.HotSpotDiagnosticMXBean # setVMOption (String, String)' an – Chriss