2009-11-18 54 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