source

Java 애플리케이션 내부에서 VM 인수를 가져오려면 어떻게 해야 합니까?

goodcode 2022. 7. 30. 19:13
반응형

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

반응형