在运行时修改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上解决