JDK의 bin 디렉터리에는 다양한 도구가 있다. 그중 java.exe와 javac.exe는 자바 개발자라면 누구나 알아야 하겠지만, 그 외 도구들의 역할까지 모든 개발자가 알 필요는 없다. JDK 버전이 업그레이드되면서 도구의 수와 기능은 알게 모르게 많아지고 개선되어 왔다. 자바 프로그램을 컴파일하고 실행하는 일 외에도 이 도구들은 패키징, 배포, 서명, 디버깅, 모니터링, 운영, 유지 보수등 다양한 시나리오에 활용된다.
명령어
기본 도구
appletviewer | 웹 브라우저 없이 애플릿 실행 및 디버깅 | JDK 버전 |
---|
extcheck | JAR 충돌 검사 | 7~8 |
jar | JAR 파일 생성 및 관리 | 7~ |
java | 클래스 파일이나 JAR 파일 실행 | 7~ |
javac | 자바 언어용 컴파일러 | 7~ |
javadoc | 자바 API 문서 생성기 | 7~ |
javah | JNI 메서드 작성용 C 언어 헤더 파일과 스터브(stub) 파일 생성기 | 7~9 |
javap | 자바 바이트코드 분석 | 7~ |
jlink | 모듈과 의존성들을 런타임 이미지 파일로 패키징 | 7~ |
jdb | JPDA 프로토콜 기반의 자바 코드 디버거(사용법은 GDB와 비슷) | 7~ |
jdeps | 자바 클래스 의존성 분석기 | 7~ |
jdeprscan | JAR 패키지에서 사용 중인 폐기 대상 클래스 검색 | 7~ |
jwebserver | 프로토타이핑, 테스팅, 디버깅용 간단한 웹 서버. HTTP 1.1과 정적 파일만 지원 | 18~ |
보안 도구
이름 | 주 용도 | JDK 버전 |
---|
keytool | 키 저장소와 인증서 관리 | 7~ |
jarsigner | JAR 서명 생성 및 검증 | 7~ |
policytool | 정책 파일 관리용 GUI 도구. 사용자 정책 파일(.java.policy) 관리에 사용한다. | 7~9 |
국제화 도구
이름 | 주 용도 | JDK 버전 |
---|
native2ascii | 네이티브→ 아스키 변환기, '지원되는 문자 인코딩'과 해당 '아스키 인코딩 및 유니코드 탈출 문자' 사이를 변환하는 데 사용한다 | 7~8 |
원격 메서드 호출 도구
이름 | 주 용도 | JDK 버전 |
---|
rmic | 자바 RMI 컴파일러, 스터브와 스켈레톤 그리고 JRMP나 IIOP를 사용하는 원격 객체용 연결(tie) 객체를 생성한다. OMGIDL 생성에도 쓰인다. | 7-14 |
miregistry | 원격 객체 레지스트리 서비스, 포트를 지정하여 현재 호스트에서 원격 객체 레지스트리를 생성하고 시작한다. | 7~ |
rmid | 활성화 시스템 데몬 시작. 가상 머신에서 객체들의 등록과 활성화를 허용한다. | 7~ |
serialver | 명시한 클래스의 직렬화 버전 아이디를 생성해 반환한다. | 7~16 |
자바 IDL과 RMI-IIOP11
이름 | 주 용도 | JDK 버전 |
---|
tnameserv | 이름 서비스에 접근 | 7~10 |
idlj | IDL→ 자바 컴파일러. OMGIDL 인터페이스에 바인딩되는 자바 소스 파일을 생성해서 자바로 작성된 애플리케이션에서 CORBA 함수를 이용할 수 있게 한다. IDL은 인터페이스 정의 언어(interface definition language)를 뜻한다. | 7~10 |
orbd | 객체 요청 브로커 데몬(object request broker daemon). 클라이언트에서 CORBA 환경의 서버들에 존재하는 영속 객체를 찾고 호출한다. 임시 이름 서비스인 tnameserv 대신 ORBD를 사용하자. ORBD는 임시 이름 서비스와 영구 이름 서비스를 모두 제공한다. orbd는 부트스트랩 서비스, 임시 이름 서비스, 영구 이름 •서비스, 서버 관리자를 통합한 도구다. servertool 도구와 함께 사용하면 클라이언트가 서버를 찾고 등록하고 활성화할 수 있다. | 7~10 |
servertool | 손쉬운 애플리케이션 등록 및 해지, 서버 시작 및 종료 인터페이스를 제공한다. | 7~10 |
배포 도구
이름 | 주 용도 | JDK 버전 |
---|
javapackager | 자바 또는 자바FX 애플리케이션 패키징 및 서명 | 7~10 |
jpackage | 자족형(self-contained) 자바 애플리케이션 패키징 도구. 자족형 자바 애플리케이션이란 마치 네이티브 애플리케이션처럼 설치/제거할 수 있는 형태를 말한다. 기존 자바 애플리케이션은 JAR 파일을 배포하고 클래스패스를 설정하는식으로 설치했다. | 14~ |
pack200 | 자바 GZIP 압축기를 사용하여 JAR 파일을 압축된 Pack200 파일로 변환. Pack200은 고도로 압축된 JAR 파일이며 그대로 배포할 수 있어 네트워크 사용량과 다운로드 시간을 줄여 준다. | 7~13 |
unpack200 | Pack200 파일의 압축을 풀어 JAR 파일로 변환 | 7~13 |
자바 웹 스타트
이름 | 주 용도 | JDK 버전 |
---|
javaws 자바 웹 스타트 프로그램을 시작하고 다양한 옵션 제공 | 7~10 | |
JVM 성능 모니터링 및 문제 해결 도구
이름 | 주 용도 | JDK 버전 |
---|
jps | JVM 프로세스 상태 도구. 지정한 시스템의 모든 핫스팟 가상 머신 프로세스를 출력한다. | 7~ |
jstat | JVM 통계적 모니터링 도구. 핫스팟 가상 머신의 다양한 런타임 데이터를 수집한다. | 7~ |
jstatd | JVM 통계적 모니터링 도구 데몬. jstat의 데몬이다. 테스트할 핫스팟 가상 머신의 생성과 종료를 모니터링하기 위한 RMI 서버 애플리케이션을 띄운다. 또한 로컬 시스템에서 실행 중인 가상 머신에 원격 모니터링 도구를 연결할 수 있는 인터페이스를 제공한다. | 7~ |
jinfo | 가상 머신의 설정 정보를 출력한다. | 7~ |
jmap | 가상 머신의 메모리 덤프 스냅숏(heapdump 파일)을 생성한다. | 7~ |
jfr | 자바 애플리케이션의 런타임 진단 및 프로파일링 | 13~ |
jhat | 힙 덤프 스냅숏 분석에 쓰인다. HTTP-웹 서버를 내장하여 사용자가 웹 브라우저로 분석 결과를 확인할 수 있다. | 7~8(※JDK9에서 jhsdb로 대체) |
jstack | 가상 머신의 스레드 스냅숏을 보여 준다. | 7~ |
jhsdb | SA 기반의 핫스팟 프로세스 디버거 | 9~ |
jsadebugd | SA 기반의 디버거 데몬, 명시한 자바 프로세스에 SA를 부착하거나, 사후에 디버거를 실행하여 코어 덤프의 내용을 분석한다. 또는 디버그 서버로 동작한다. | 7~8 |
jcmd | 가상 머신 진단용 명령 줄 도구. 실행 중인 자바 가상 머신에 진단 명령을 보낸다. | 7~ |
jconsole | 자바 가상 머신 모니터링용 GUI 도구. JMX 명세를 따른다. 로컬/원격 가상 머신을 모니터링할 수 있고 애플리케이션들을 모니터링, 관리할 수 있다. | 7~ |
jmc | 성능 오버헤드 없이 자바 애플리케이션을 모니터링하고 관리한다. | 7~10(※JDK 11부터 별도 제공) |
jvisualvm | 자바 VisualVM. 자바 가상 머신에서 실행 중인 자바 애플리케이션에 대한 상세 정보를 제공하는 GUI 도구다. 메모리와 CPU 분석, 힙 덤프 분석, 메모리 누수 검출, MBean 접근, 가비지 컬렉션 등의 정보를 제공한다. | 7~8(※JDK 9부터 별도 제공) |
웹 서비스 도구
이름 | 주 용도 | JDK 버전 |
---|
schemagen | XML 바인딩용 스키마 생성기. XML 스키마 파일을 생성한다. | 7~10 |
wsgen | XML 웹 서비스 2.0용 자바 API. JAX-WS 웹 서비스에서 쓰이는 JAX-WS 아티팩트를 생성한다. | 7~10 |
wsimport | XML 웹 서비스 2.0용 자바 API. 주로 서버에서 게시한 WSDL 파일을 기반으로 클라이언트를 생성하는 데 사용한다. | 7~10 |
xjc | 주로 XML 스키마 파일을 기반으로 자바 클래스 파일을 생성한다. | 7~10 |
REPL과 스크립트 도구
이름 | 주 용도 | JDK 버전 |
---|
jshell | 자바 기반 셸 REPL 도구 | 9~ |
jjs | 나스혼(Nashorn) 엔진 기반 명령 줄 도구. 나스혼은 자바로 만든 자바스크립트 실행 환경으로 가볍고 빠르다. | 7~14 |
jrunscript | 자바 명령 줄 스크립트 셸. 자바스크립트, 그루비, 루비 등의 스크립트 언어를 해석하고 실행한다. | 7~ |
GUI 도구
명령 주 도구 외에도 JDK는 더 많은 기능을 통합한 GUI 도구도 몇 가지 제공한다. 대체로 GUI 도구로 프로세스 오류를 더 쉽게 진단하고 디버깅할 수 있다. 가상 머신 문제 해결용 GUI 도구로는 JConsole, JHSDB, VisualVM, JMC
가 대표적이다.
사용하고 싶은 GUI 도구에 대해서는 찾아서 사용해보기를 추천한다.
HotSpot JVM 플러그인
핫스팟 소스 코드를 깊게 들여다보면 핫스팟 개발 과정에서 많은 플러그인과 보조 도구가 제작되어 왔음을 알 수 있다. 실제로 JDK_SRC_HOME/src/utils/
에서 다음 도구들을 찾아볼 수 있다.
- IGV : C2 JIT 컴파일러가 바이트코드를 아이디얼 그래피로 변환한 후 다시 기계어 코드로 변환하는 과정을 시각화해 준다.
- CCV : C1 JIT 컴파일러가 HIR을 생성하고 저수준 중간 표현으로 변환한 후 물리 레지스터를 할당하는 과정을 보여준다.
- Project Creator : Visul Studio용 .project 파일 생성을 도와준다 (JDK 9 제거)
- LogCompilation :
-XX:+LogCompilation
옵션으로 출력된 로그를 더 일기 편한 포맷으로 변환한다.
- HSDIS : JIT 컴파일러용 디스어셈블러