JVM에 전달할 수있는 옵션이 명시 적으로 설정되어 있는지 또는 기본값이 있는지 확인해야합니다.
더 구체적으로 말하면 : 기본 스레드보다 기본 스택 크기가 더 높은 하나의 특정 스레드를 만들어야하지만 사용자가 -Xss
옵션 을 지정하여 직접 처리 하려는 경우 기본 스택 크기의 모든 스레드를 만들고 싶습니다. (-Xss 옵션에서 사용자가 지정 함).
java.lang.System
and과 같은 클래스를 확인 java.lang.Runtime
했지만 VM 인수에 대한 유용한 정보를 제공하지 않습니다.
필요한 정보를 얻을 수있는 방법이 있습니까?
답변
이 코드를 사용하면 JVM 인수를 얻을 수 있습니다.
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
...
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMxBean.getInputArguments();
답변
시작시 이것을 통과 -Dname=value
그런 다음 코드에서 사용해야합니다
value=System.getProperty("name");
그 가치를 얻기 위해
답변
HotSpot은 -client 및 -server를 제외한 관리 Bean의 모든 VM 인수를 나열합니다. 따라서 VM 이름에서 -client / -server 인수를 유추하여이를 런타임 관리 Bean의 목록에 추가하면 전체 인수 목록이 표시됩니다.
SSCCE는 다음과 같습니다.
import java.util.*;
import java.lang.management.ManagementFactory;
class main {
public static void main(final String[] args) {
System.out.println(fullVMArguments());
}
static String fullVMArguments() {
String name = javaVmName();
return (contains(name, "Server") ? "-server "
: contains(name, "Client") ? "-client " : "")
+ joinWithSpace(vmArguments());
}
static List<String> vmArguments() {
return ManagementFactory.getRuntimeMXBean().getInputArguments();
}
static boolean contains(String s, String b) {
return s != null && s.indexOf(b) >= 0;
}
static String javaVmName() {
return System.getProperty("java.vm.name");
}
static String joinWithSpace(Collection<String> c) {
return join(" ", c);
}
public static String join(String glue, Iterable<String> strings) {
if (strings == null) return "";
StringBuilder buf = new StringBuilder();
Iterator<String> i = strings.iterator();
if (i.hasNext()) {
buf.append(i.next());
while (i.hasNext())
buf.append(glue).append(i.next());
}
return buf.toString();
}
}
의 인수를 원하면 더 짧아 질 수 있습니다 List<String>
.
마지막 참고 사항 : 명령 줄 인수 내에 공백이있는 드문 경우를 처리하기 위해이를 확장 할 수도 있습니다.
답변
특별히 VM 설정을 얻으려고 시도하지는 않았지만 JMX 유틸리티, 특히 MXBean 유틸리티에 대한 많은 정보가 있습니다. 이것은 내가 시작할 곳입니다. 바라건대 당신을 도울 무언가를 찾으십시오.
썬 웹 사이트에는이 기술이 많이 있습니다 :
http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html
답변
Java 프로세스의 전체 명령 행을 원하는 경우 다음을 사용할 수 있습니다. JvmArguments.java
(JNA + / proc의 조합을 사용하여 대부분의 유닉스 구현을 포괄)