2009-11-18 9 views

risposta

34

Per le proprietà impostate tramite il flag -D sulla riga di comando, si desidera System.setProperty. Per esempio:

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

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

Aggiornamento:

Non è possibile abilitare il debug in modo dinamico, ma è possibile attivare il debug in fase di avvio, ma collegare un debugger dopo. Con quanto segue, è possibile ascoltare sulla porta 12345 e avviare subito il programma in esecuzione (tramite suspend=n). Poi si può collegare un debugger se/quando è necessario, staccare il debugger, collegare più tardi, ecc

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

Naturalmente, questo fa male le prestazioni anche quando il debugger non è collegato, in modo che funziona bene solo nel codice dev/test, non nella produzione. Per questo, si desidera la registrazione, ad es. log4j.

+0

E le opzioni -X non standard? in particolare -Xdebug e alcune altre flag di debugging? – Guy

+0

Ho aggiunto un aggiornamento con informazioni di debug. –

+0

Grazie mille Harold! – Guy

3

Una risposta breve è che non è possibile modificare i parametri VM in fase di esecuzione. La classe Runtime espone alcune opzioni come la memoria massima. I parametri principali come la memoria massima dovrebbero essere impostati solo da un tipo di amministratore che consente la gestione delle risorse quando coesistono più JVM su una macchina. Permettere ad una JVM di diventare avida e chiedere molto e molto di più di quanto è stato assegnato ucciderebbe questo vincolo.

+0

La classe java.lang.Runtime può dirvi qual è l'impostazione di memoria massima, ma non consente di modificarla. – tgdavies

+0

@tdavies So e ho dato il motivo per cui questo valore è immutabile. –

+7

-1 È possibile modificare i parametri della macchina virtuale in runtime! Date un'occhiata a 'com.sun.management.HotSpotDiagnosticMXBean # setVMOption (String, String)' – Chriss