2009-11-18 53 views

回答

34

對於通過命令行上的-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

+0

怎麼樣-X非標準選項?尤其是-Xdebug和其他一些調試標誌? – Guy 2009-11-18 07:23:31

+0

我添加了一個帶有調試信息的更新。 – 2009-11-18 07:51:57

+0

謝謝哈羅德! – Guy 2009-11-18 08:02:53

3

一個簡短的答案是,您不能在運行時更改虛擬機參數。運行時類確實暴露了一些選項,如最大內存。諸如最大內存的主要參數應該只能由一個管理員類型來設置,以允許在機器上存在多個JVM時管理資源。如果允許一個JVM變得貪婪,並且要求分配的許多和更多資源將會消除這個約束。

+0

java.lang.Runtime類可以告訴你最大的內存設置是什麼,但它不允許它被改變。 – tgdavies 2009-11-24 11:26:29

+0

@tdavies 我知道,我給出了這個值是不可變的原因。 – 2009-11-24 11:58:11

+7

-1可以將VM參數更改爲運行時!看看'com.sun.management.HotSpotDiagnosticMXBean#setVMOption(String,String)' – Chriss 2012-09-06 08:31:14