source

중복된 Java 런타임 옵션: 기본 설정 순서는 무엇입니까?

itover 2022. 11. 2. 21:31
반응형

중복된 Java 런타임 옵션: 기본 설정 순서는 무엇입니까?

다음 명령줄을 고려합니다.

java -Xms128m -Xms256m myapp.jar

JVM 최소 메모리에 적용되는 설정(Xms옵션): 128m 또는 256m?

항상 그렇듯이 로컬 JVM의 특정 구현을 확인합니다. 단, 여기에서는 코드화할 필요 없이 명령줄에서 빠르게 확인할 수 있는 방법이 있습니다.

> java -version; java -Xmx1G -XX:+PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
uintx MaxHeapSize         := 2147483648        {product}

이 경우 두 번째 인수(2G)가 우선이며(적어도 1.8에서는) 다른 대부분의 최신 버전에서도 마찬가지입니다.

IBM JVM은 인수의 맨 오른쪽 인스턴스를 승자로 간주합니다.핫스팟 등과 통화할 수 없습니다.

배치 파일에는 깊이 중첩된 명령줄이 있어 최종 사용자만 추가할 수 있으며, 이 명령줄을 성공시키고자 하는 경우가 많기 때문입니다.

FTR, OpenJDK 1.7도 적어도 -Xms의 경우 가장 오른쪽 값을 사용하는 것으로 보입니다.

JVM에 따라 다릅니다.아마 버전...아마 책상 위에 얼마나 많은 종이 클립이 있는지 알 수 있을 겁니다.효과가 없을 수도 있어요.그러지마세요.

만약 어떤 이유로든 당신이 통제할 수 없다면, 당신의 항아리를 조작하는 것과 같은 방법으로 컴파일하고 실행하세요.하지만 경고하는데, 선택지의 순서에 의존하는 것은 정말 나쁜 생각이다.

public class TotalMemory
{
    public static void main(String[] args)
    {
         System.out.println("Total Memory: "+Runtime.getRuntime().totalMemory());
         System.out.println("Free Memory: "+Runtime.getRuntime().freeMemory());
    }
}

JVM 최소 메모리에 적용되는 설정은 무엇입니까?

아래 나열된 Java의 다양한 버전에서 "winner"는 인수 목록에서 가장 오른쪽에 있는 값입니다.다른 사람들이 지적했듯이, 이에 의존하는 것은 좋은 생각이 아니지만, 그럼에도 불구하고 이것은 공유하기에 유용한 정보일 수 있다.

Java 1.8.0_172

~ $ java8
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize
    uintx MaxHeapSize                              := 4219469824                          {product}

Java 11.0.3

~ $ java11
java version "11.0.3" 2019-04-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3+12-LTS, mixed mode)
~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize
   size_t MaxHeapSize                              = 4219469824                                {product} {command line}

Open JDK 12.0.1

~ $ java12
openjdk version "12.0.1" 2019-04-16
OpenJDK Runtime Environment (build 12.0.1+12)
OpenJDK 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)
~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize
   size_t MaxHeapSize                              = 4219469824                                {product} {command line}

오픈 채택JDK 12.0.1

~ $ java12a
openjdk version "12.0.1" 2019-04-16
OpenJDK Runtime Environment AdoptOpenJDK (build 12.0.1+12)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 12.0.1+12, mixed mode, sharing)
~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize
   size_t MaxHeapSize                              = 4219469824                                {product} {command line}

Open JDK 13-ea

~ $ java13
openjdk version "13-ea" 2019-09-17
OpenJDK Runtime Environment (build 13-ea+22)
OpenJDK 64-Bit Server VM (build 13-ea+22, mixed mode, sharing)
~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize
   size_t MaxHeapSize                              = 4219469824                                {product} {command line}

두 번째일 거예요.인수는 보통 다음 순서로 처리됩니다.

for( int i=0; i<argc; i++ ) {
  process_argument(argv[i]);
}

하지만 만약 내가 자바 인수 파서를 쓴다면, 나는 상충되는 주장에 대해 불평할 것이다.

내 실험에 따르면 그것은 최대값을 필요로 한다.xmx.

그래서 네가 합격하면-xmx4g -xmx1g시간이 걸릴 것이다4t, 그리고 만약 당신이 통과한다면-xmx1g -xmx4g그것은 여전히 걸릴 것이다4g.

언급URL : https://stackoverflow.com/questions/2740725/duplicated-java-runtime-options-what-is-the-order-of-preference

반응형