source

JVM 인수가 "-D"로 시작하는 이유는 무엇입니까?

gigabyte 2022. 12. 28. 21:36
반응형

JVM 인수가 "-D"로 시작하는 이유는 무엇입니까?

JVM 인수 접두사가 필요한 이유는 무엇입니까?-D예를 들어 명령줄에서 항아리를 실행할 때?예.

java -jar -DmyProp="Hello World" myProgram.jar

를 실행하는 데 사용됩니다.myProgram.jarsystem 파라미터와 함께myProp그럼 왜 선두가-DJava의 설계자는 왜 다음과 같은 작업을 쉽게 수행할 수 없었을까요?

java -jar -myProp="Hello World" myProgram.jar

'왜냐하면 그렇게 되기 때문'을 넘어서는 대답을 기대하고 있습니다.

보너스 질문:왜 편지인가-D다른 편지와는 달리 무슨 의미가 있나요?


주의: 이 질문에서는 애초에 "D" 또는 그 외의 문자를 사용할 필요가 있었던 이유를 묻고 있습니다.다른 문자보다 특정 문자 "D"를 선택하는 것은 중요하지 않지만, 이는 보너스 질문으로 질문됩니다.

보너스 질문에 대한 답은 다음과 같습니다.Java -D에서 D는 무엇을 나타냅니까?

왜 Java의 설계자들은 우리에게 다음과 같은 일을 쉽게 할 수 없었을까요?

java -jar -myProp="Hello World" myProgram.jar

현재는 동작할 수 있습니다만, 다음의 Java 버전에서는,-myProp인수는 JVM 옵션으로 도입되었습니다.
식별 방법-myProp에서-myPropJVM 옵션?말도 안돼.
그래서 그것은 명백한 이유가 있다.-D시스템 속성을 정의합니다.

다른 예로서,-myProp프로그램이 에 의존한다고 가정합니다.-client시스템 속성.
실행되지 않음:

java -jar -client="davidxxx" myProgram.jar

다음과 같은 JVM 오류가 발생합니다.

인식할 수 없는 옵션: -client=davidxxxx

~하듯이-client값은 기대하지 않는 JVM 표준 옵션입니다.

단,-D-client, 지금은 여기처럼 괜찮다.-Dclient시스템 속성으로 정의되어 있습니다.-client표준 JVM 옵션:

java -jar -D-client="davidxxx" myProgram.jar

또는 다음 두 가지를 모두 사용합니다.

java -jar -client -D-client="davidxxx" myProgram.jar

나아가 모든 JVM 인수가 시작하는 것은 아니지만 대부분의 인수는 프레픽스가 있습니다.-D,-X,-XX)를 사용하여 네임스페이스를 정의할 수 있습니다.

JVM 인수의 범주는 다음과 같습니다.

1. 표준 옵션 (-D뿐만 아니라)

이들은 JVM의 모든 구현에서 지원되는 가장 일반적으로 사용되는 옵션입니다.

사용하다-D시스템 속성을 지정하는데 대부분 접두사가 없습니다.-verbose,-showversion, 등등...

2. 비표준 옵션 (프리픽스)-X)

이러한 옵션은 Java HotSpot 가상 시스템과 관련된 범용 옵션입니다.
예를 들어 다음과 같습니다.-Xmssize,-Xmxsize

3. 고급 런타임 옵션(프리픽스 포함)-XX)

이러한 옵션은 Java HotSpot VM의 런타임 동작을 제어합니다.

컴파일러 옵션(4. 컴파일러 옵션)-XX)

이러한 옵션은 Java HotSpot VM에 의해 수행되는 동적 JIT(Just-In-Time) 컴파일을 제어합니다.

Options (5. 서비스 어빌리티 옵션) ()-XX)

이러한 옵션을 사용하면 시스템 정보를 수집하고 광범위한 디버깅을 수행할 수 있습니다.

Garbage Options (프리픽스에는 6. 옵션)-XX)

이러한 옵션은 Java HotSpot VM에서 GC(가비지 컬렉션)를 수행하는 방법을 제어합니다.


"정의"의미는 C의 프리프로세서 정의와 비슷합니다.-D는 정의가 실행 파일 이름 앞의 다른 옵션과 같이 Java 인터프리터 컨텍스트에 있지 않고 응용 프로그램의 컨텍스트에 있음을 나타냅니다.

문서에서는 문자 "D"의 사용에 대해 구체적으로 설명하지 않지만, 이 참조를 제외하고 시스템 속성 맵에서 키를 "정의"하는 것이 유일한 용도입니다.

System 클래스는 현재 작업 환경의 구성을 정의하는 Properties 개체를 유지합니다.이러한 속성에 대한 자세한 내용은 시스템 속성을 참조하십시오.이 섹션의 나머지 부분에서는 속성을 사용하여 응용 프로그램 설정을 관리하는 방법에 대해 설명합니다.

myProp="XYZ"와 같은 항목을 지정하지 않으면 프로그램의 주요 메서드에 인수로 전달됩니다.

D는 System.getProperty를 사용하여 이 값을 사용할 수 있음을 의미합니다.

-X는 -Xdebug -Xnoagent -Djava.compiler=와 같은 확장 인수에 사용됩니다.없음 - Xrunjdwp: transport=dt_socket, server=y, suspend=y, address=8000

네, 서로 교환했을 수도 있어요단, 이러한 문자는 전달되는 파라미터 유형 및 사용자 지정에 사용됩니다.

-DJVM을 이용하다를 들어, 속성 「」, 「」를 어떻게 할 수 있습니까?jar

-D는 C 프리프로세서에서도 심볼을 정의하기 위해 사용되며, 따라서 대부분의 사람들에게 친숙하기 때문에 선택되었을 것입니다(그 것에 대해서는 추측만 할 수 있습니다.

언급URL : https://stackoverflow.com/questions/44745261/why-do-jvm-arguments-start-with-d

반응형