Java 애플리케이션 내부에서 VM 인수를 가져오려면 어떻게 해야 합니까?
JVM에 전달할 수 있는 옵션이 명시적으로 설정되어 있거나 기본값이 설정되어 있는지 확인해야 합니다.
좀 더 구체적으로 말하면:기본 스택 크기보다 더 큰 네이티브스택 크기를 가진 특정 스레드를 1개 작성해야 하는데 사용자가 직접 이러한 작업을 처리하고 싶은 경우-Xss기본 스택 크기로 모든 스레드를 만듭니다(-Xss 옵션에서 사용자에 의해 지정됨).
이런 수업들을 체크해봤는데java.lang.System그리고.java.lang.RuntimeVM 인수에 대한 유용한 정보를 얻을 수 없습니다.
필요한 정보를 얻을 수 있는 방법이 있나요?
시작 시 패스-Dname=value
그리고 당신의 코드에서 당신은 다음을 사용해야 합니다.
value=System.getProperty("name");
그 가치를 얻기 위해
이 코드를 사용하면 JVM 인수를 얻을 수 있습니다.
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
...
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMxBean.getInputArguments();
HotSpot은 -client와 -server를 제외한 모든 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 유틸리티에는 풍부한 정보가 있습니다.여기서부터 시작할 수 있을 거야도움이 될 만한 걸 찾길 바라
Sun 웹사이트에는 기술에 관한 많은 정보가 있습니다.
http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html
Java 프로세스의 전체 명령줄을 원하는 경우 JvmArguments.java를 사용할 수 있습니다(대부분의 unix 구현에 JNA + /proc 조합 사용).
언급URL : https://stackoverflow.com/questions/1490869/how-to-get-vm-arguments-from-inside-of-java-application
'source' 카테고리의 다른 글
| Java를 사용한 DOM 구문 분석의 정규화 - 어떻게 작동합니까? (0) | 2022.07.30 |
|---|---|
| Vue.js / Larabel - 로그아웃을 올바르게 처리 (0) | 2022.07.30 |
| vue-cli-service build 명령을 사용하여 자산을 복사하는 방법 (0) | 2022.07.30 |
| return 스테이트먼트 vs exit() in main() (0) | 2022.07.30 |
| -g 플래그에도 불구하고 Valgrind에 행 번호가 표시되지 않음(Ubuntu 11.10/Virtual Box) (0) | 2022.07.30 |