나는 간의 비교 가지고 좋은 것 생각 _JAVA_OPTIONS
과 JAVA_TOOL_OPTIONS
. 하나를 조금 찾고 있지만 아무것도 찾을 수 없으므로 여기에서 Stackoverflow에 대한 지식을 찾을 수 있기를 바랍니다.
JAVA_OPTS
완전성을 위해 포함되어 있습니다. JVM의 일부는 아니지만 실제로는 많은 질문이 있습니다.
내가 아는데 것을:
지금까지 나는 그것을 발견했다.
JAVA_OPTS
JDK가 아니라 다른 많은 앱에서 사용됩니다 ( 이 게시물 참조 ).JAVA_TOOL_OPTIONS
그리고_JAVA_OPTIONS
대신에 명령 줄 매개 변수의 환경 변수로 JVM 인수를 지정하는 방법입니다.- 이 적어도에 의해 선택됩니다
java
및javac
- 그들은이 우선권을 가지고 있습니다 :
_JAVA_OPTIONS
(다른 것을 덮어 씁니다)- 명령 줄 매개 변수
JAVA_TOOL_OPTIONS
(다른 사람들이 덮어 썼음)
- 이 적어도에 의해 선택됩니다
내가 알고 싶은 것
- 공식적인 문서 비교가 있습니까
JAVA_TOOL_OPTIONS
하고_JAVA_OPTIONS
JAVA_TOOL_OPTIONS
와_JAVA_OPTIONS
( 다른 우선권을 제외하고) 다른 차이점이 있습니까?- 실행 픽업 어떤
JAVA_TOOL_OPTIONS
과_JAVA_OPTIONS
(에 추가java
하고javac
) - 에 포함 할 수있는 일에 어떤 제한
JAVA_TOOL_OPTIONS
및_JAVA_OPTIONS
공식 문서
에 대한 문서를 찾을 수 없습니다 _JAVA_OPTIONS
. 에 대한 문서JAVA_TOOL_OPTIONS
는 차이점에 대해 많은 것을 밝히지 않았습니다.
예를 들어 내장 VM 또는 단순히 스크립트 내에서 시작된 VM과 같은 명령 줄에 항상 액세스하거나 수정할 수 없으므로 JAVA_TOOL_OPTIONS 변수가 제공되므로 이러한 경우 에이전트를 시작할 수 있습니다.
…
스크립트 예
이것이 내가 알아내는 데 사용한 코드입니다. 콘솔 출력은 주석으로 포함됩니다.
export JAVA_OPTS=foobar
export JAVA_TOOL_OPTIONS=
export _JAVA_OPTIONS="-Xmx512m -Xms64m"
java -version
# Picked up JAVA_TOOL_OPTIONS:
# Picked up _JAVA_OPTIONS: -Xmx512m -Xms64m
# java version "1.7.0_40"
OpenJDK Runtime Environment (IcedTea 2.4.1) (suse-3.41.1-x86_64)
OpenJDK 64-Bit Server VM (build 24.0-b50, mixed mode)
javac -version
# Picked up JAVA_TOOL_OPTIONS:
# Picked up _JAVA_OPTIONS: -Xmx512m -Xms64m
# javac 1.7.0_40
export JAVA_TOOL_OPTIONS="-Xmx1 -Xms1"
export _JAVA_OPTIONS="-Xmx512m -Xms64m"
javac -version
# Picked up JAVA_TOOL_OPTIONS: -Xmx1 -Xms1
# Picked up _JAVA_OPTIONS: -Xmx512m -Xms64m
# javac 1.7.0_40
export JAVA_TOOL_OPTIONS="-Xmx512m -Xms64m"
export _JAVA_OPTIONS="-Xmx1 -Xms1"
javac -version
# Picked up JAVA_TOOL_OPTIONS: -Xmx512m -Xms64m
# Picked up _JAVA_OPTIONS: -Xmx1 -Xms1
# Error occurred during initialization of VM
# Too small initial heap
export JAVA_TOOL_OPTIONS="-Xmx1 -Xms1"
export _JAVA_OPTIONS=
java -Xmx512m -Xms64m -version
# Picked up JAVA_TOOL_OPTIONS: -Xmx1 -Xms1
# Picked up _JAVA_OPTIONS:
# java version "1.7.0_40"
# OpenJDK Runtime Environment (IcedTea 2.4.1) (suse-3.41.1-x86_64)
# OpenJDK 64-Bit Server VM (build 24.0-b50, mixed mode)
export JAVA_TOOL_OPTIONS=
export _JAVA_OPTIONS="-Xmx1 -Xms1"
java -Xmx512m -Xms64m -version
# Picked up JAVA_TOOL_OPTIONS:
# Picked up _JAVA_OPTIONS: -Xmx1 -Xms1
# Error occurred during initialization of VM
# Too small initial heap
답변
라이브러리 호출을 통해 프로세스 내에서 JVM을 시작하더라도 이러한 옵션이 선택된다는 점을 제외하고는 거의 문제가되지 않았습니다.
_JAVA_OPTIONS
문서화되지 않은 사실 은이 변수를 사용하지 않는 것이 좋습니다. 실제로 사람들이 변수를에 설정하여 악용하는 것을 보았습니다 ~/.bashrc
. 그러나이 문제를 해결하려면 Oracle HotSpot VM의 소스를 확인할 수 있습니다 (예 : OpenJDK7 ).
또한 다른 VM이 문서화되지 않은 변수를 지원하거나 계속 지원한다는 보장은 없습니다.
2015-08-04 업데이트 : 검색 엔진에서 오는 사람들을 위해 5 분을 절약하기 위해 _JAVA_OPTIONS
명령 줄 인수보다 우선 JAVA_TOOL_OPTIONS
합니다.
답변
차이점은 하나 더 있습니다. _JAVA_OPTIONS
Oracle에 따라 다릅니다. IBM JVM이 IBM_JAVA_OPTIONS
대신 사용 중입니다. 이것은 충돌없이 머신 별 옵션을 정의 할 수 있도록하기위한 것입니다. JAVA_TOOL_OPTIONS
모든 VM에서 인식됩니다.
답변
그리고에 따라 https://bugs.openjdk.java.net/browse/JDK-4971166 은 JAVA_TOOL_OPTIONS
더 인용 공간의 취급 않으며, 대신 항상 문서화되지 않은 핫스팟 특정의 바람직한한다 표준 JVMTI 사양에 포함되어 있습니다 _JAVA_OPTIONS
.
또한 이들을 사용하면 억제 할 수없는 추가 메시지가 stdout에 인쇄 됩니다.
@ryenus가 지적했듯이 JDK 9 이상부터 JDK_JAVA_OPTIONS가 선호되는 대체품 입니다. Java 11을 사용할 때 JDK_JAVA_OPTIONS와 JAVA_TOOL_OPTIONS의 차이점 은 무엇입니까?를 참조하십시오 .