在运行时修改JVM参数
时间:2020-03-06 14:21:41 来源:igfitidea点击:
有人知道是否可以在运行时修改JVM设置(例如-dname = value)吗?
我需要这个小技巧来运行Java存储过程(oracle 10g)。
解决方案
假设意思是系统属性(-D ...; -d选择数据模型),System.setProperty(...)可能会做我们想要的。
我们绝对可以使用System.setProperty()在Java存储过程中设置系统属性。但是,它们仅可用于当前的Oracle会话。
例如,如果我们连接到Oracle,并运行设置系统属性的Java存储过程,则与Oracle断开连接。下次连接到Oracle时,系统属性将不存在。与Oracle的每个会话都有其自己的伪分离JVM(即使所有会话实际上共享一个JVM)。
如果我们用于Oracle会话的帐户具有足够的权限,则可以运行外部操作系统命令,包括单独的外部JVM。
我们可以使用System.setProperty()更改系统属性,但是是否有效实际上取决于该系统属性。有些属性是静态读取的,即在类加载时读取,而另一些则可能将值缓存在某些对象字段中。
我们可以在Java存储过程中使用OracleRuntime类。
int times = 2; OracleRuntime.setMaxRunspaceSize(times *OracleRuntime.getMaxRunspaceSize()); OracleRuntime.setSessionGCThreshold(times *OracleRuntime.getSessionGCThreshold()); OracleRuntime.setNewspaceSize(times *OracleRuntime.getNewspaceSize()); OracleRuntime.setMaxMemorySize(times *OracleRuntime.getMaxMemorySize()); OracleRuntime.setJavaStackSize(times *OracleRuntime.getJavaStackSize()); OracleRuntime.setThreadStackSize(times *OracleRuntime.getThreadStackSize());
此示例代码在oracle jvm中乘以2的内存状态。
注意:import oracle.aurora.vm.OracleRuntime;将在" aurora.zip"上的oracle jvm上解决