2008-09-18 3 views
0

런타임에 JVM 설정을 수정할 수 있는지 알고 있습니까? (예 : -dname = value)? Java 저장 프로 시저 (oracle 10g)를 실행하려면이 작은 트릭이 필요합니다.런타임시 JVM 매개 변수 수정

+0

이 질문은 큰 그림을보기 위해 애원합니다. 무엇보다 목표는 무엇입니까? 더 나은 경로가있을 수 있습니다. – willCode4Beer

답변

5

시스템 속성 (-D ...; -d가 데이터 모델을 선택 함)을 의미한다고 가정하면 System.setProperty (...)가 원하는 것을 수행 할 수 있습니다.

+0

또한 런타임시 설정하면 몇 가지 시스템 속성이 적용되지 않습니다. – jsight

+0

그리고 현재 담당하고있는 SecurityManager가 시스템 속성을 변경하는 것에 동의해야한다는 것을 명심하십시오. –

0

System.setProperty()를 사용하여 Java 저장 프로 시저에서 시스템 속성을 확실히 설정할 수 있습니다. 그러나 현재 Oracle 세션에서만 사용할 수 있습니다.

예를 들어, Oracle에 연결하고 시스템 등록 정보를 설정하는 Java 저장 프로 시저를 실행 한 다음 Oracle에서 연결을 끊습니다. 다음에 Oracle에 연결하면 시스템 특성이 나타나지 않습니다. 오라클과의 각 세션은 자체 세션을 자체 JVM (비록 모든 세션이 실제로 단일 JVM을 공유하고 있음에도 불구하고)을 가지고 있습니다.

Oracle 세션에 사용중인 계정에 충분한 권한이있는 경우 별도의 외부 JVM을 포함한 외부 운영 체제 명령을 실행할 수 있습니다.

0

System.setProperty()를 사용하여 시스템 속성을 변경할 수 있지만 실제로 적용되는지 여부는 해당 시스템 속성에 따라 다릅니다. 어떤 프로퍼티들은 정적으로, 즉 클래스 로딩시에 읽혀지고, 다른 프로퍼티들은 어떤 객체 필드에 값을 캐시 할 수 있습니다.

1

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에서 해결 될 것입니다.