The Java Development Kit (JDK) is a distribution of Java Technology by Oracle Corporation. It implements the Java Language Specification (JLS) and the Java Virtual Machine Specification (JVMS) and provides the Standard Edition (SE) of the Java Application Programming Interface (API). It is derivative of the community driven OpenJDK which Oracle stewards. It provides software for working with Java applications. Examples of included software are the virtual machine, a compiler, performance monitoring tools, a debugger, and other utilities that Oracle considers useful for a Java programmer.

Oracle have released the current version of the software under the Oracle No-Fee Terms and Conditions (NFTC) license. Oracle release binaries for the x86-64 architecture for Windows, macOS, and Linux based operating systems, and for the aarch64 architecture for macOS and Linux. Previous versions have supported the Oracle Solaris operating system and SPARC architecture.

Oracle's primary implementation of the JVMS is known as the HotSpot (virtual machine).

JDK contents 
The JDK has as its primary components a collection of programming tools, including:

 appletviewer – this tool can be used to run and debug Java applets without a web browser
 apt – the annotation-processing tool
 extcheck – a utility that detects JAR file conflicts
 idlj – the IDL-to-Java compiler. This utility generates Java bindings from a given Java IDL file.
 jabswitch – the Java Access Bridge. Exposes assistive technologies on Microsoft Windows systems.
 java – the loader for Java applications. This tool is an interpreter and can interpret the class files generated by the javac compiler. Now a single launcher is used for both development and deployment. The old deployment launcher, jre,  comes with Sun JDK, and instead it has been replaced by this new java loader.
 javac – the Java compiler, which converts source code into Java bytecode
 javadoc – the documentation generator, which automatically generates documentation from source code comments
 jar – the archiver, which packages related class libraries into a single JAR file. This tool also helps manage JAR files.
 javafxpackager – tool to package and sign JavaFX applications
 jarsigner – the jar signing and verification tool
 javah – the C header and stub generator, used to write native methods
 javap – the class file disassembler
 javaws – the Java Web Start launcher for JNLP applications
 JConsole – Java Monitoring and Management Console
 jdb – the debugger
 jhat – Java Heap Analysis Tool (experimental)
 jinfo – This utility gets configuration information from a running Java process or crash dump. (experimental)
 jmap Oracle jmap - Memory Map– This utility outputs the memory map for Java and can print shared object memory maps or heap memory details of a given process or core dump. (experimental)
 jmc – Java Mission Control 
 jpackage – a tool for generating self-contained application bundles. (experimental)
 jps – Java Virtual Machine Process Status Tool lists the instrumented HotSpot Java Virtual Machines (JVMs) on the target system. (experimental)
 jrunscript – Java command-line script shell.
 jshell - a read–eval–print loop, introduced in Java 9.
 jstack – utility that prints Java stack traces of Java threads (experimental)
 jstat – Java Virtual Machine statistics monitoring tool (experimental)
 jstatd – jstat daemon (experimental)
 keytool – tool for manipulating the keystore
 pack200 – JAR compression tool
 policytool – the policy creation and management tool, which can determine policy for a Java runtime, specifying which permissions are available for code from various sources.
 VisualVM – visual tool integrating several command-line JDK tools and lightweight performance and memory profiling capabilities (no longer included in JDK 9+)
 wsimport – generates portable JAX-WS artifacts for invoking a web service.
 xjc – Part of the Java API for XML Binding (JAXB) API. It accepts an XML schema and generates Java classes.

Experimental tools may not be available in future versions of the JDK.

The JDK also comes with a complete Java Runtime Environment (JRE), usually called a private runtime, due to the fact that it is separated from the "regular" JRE and has extra contents. It consists of a Java virtual machine and all of the class libraries present in the production environment, as well as additional libraries only useful to developers, such as the internationalization libraries and the IDL libraries.

Copies of the JDK also include a wide selection of example programs demonstrating the use of almost all portions of the Java API.

Other JDKs
In addition to the most widely used JDK discussed in this article, there are other JDKs commonly available for a variety of platforms, some of which started from the Sun JDK source and some that did not.  All adhere to the basic Java specifications, but often differ in explicitly unspecified areas, such as garbage collection, compilation strategies, and optimization techniques.  They include:

In development or in maintenance mode:
 Azul Systems Zing, low latency JDK for Linux;
 Azul Systems / OpenJDK-based Zulu for Linux, Windows, Mac OS X, embedded and the cloud;
 OpenJDK / IcedTea;
 Aicas JamaicaVM;
 IBM J9 JDK, for AIX, Linux, Windows, MVS, OS/400, Pocket PC, z/OS;

Not being maintained or discontinued:
 Apache Harmony;
 Apple's Mac OS Runtime for Java JVM/JDK for Classic Mac OS;
 Blackdown Java – Port of Sun's JDK for Linux;
GNU's Classpath and GCJ (The GNU Compiler for Java);
 Oracle Corporation's JRockit JDK, for Windows, Linux, and Solaris;

See also

 Classpath
 Java platform
 Java version history

References

External links
 Oracle Java SE
 Oracle Java SE Support Roadmap
 Open source OpenJDK project
 OpenJDK builds from Oracle
 OpenJDK builds from AdoptOpenJDK
 IBM Java SDK Downloads
 Open source JDK 7 project
 GNU Classpath – a Free software JDK alternative

JDK
Software development kits
Oracle software
Sun Microsystems software
자바 개발 키트(, JDK)는 자바 SE, 자바 EE, 또는 자바 ME 플랫폼 중 하나를 구현한 것으로 솔라리스, 리눅스, 맥 OS X, 또는 윈도우 자바 개발자를 대상으로 오라클에 의해 바이너리 제품으로 제공된다. 자바 플랫폼의 등장 이래 지금까지 가장 널리 사용되는 소프트웨어 개발 키트(SDK)다. 2006년 11월 17일 썬은 GNU 일반 공중 사용 허가서 (GPL)하에 출시될 것이라고 발표했고, 이에 따라 자유 소프트웨어가 되었다. 이는 썬이 2007년 5월 8일 소스 코드를 오픈 JDK에 기부함에 따라 이루어졌다.

오라클 자바 테크놀로지가 제공하는 자바 개발 키트(Java™ Platform, Standard Edition Development Kit (JDK™))는 자바 어플리케이션을 위한 자바 언어 스펙(JLS), 자바 가상 머신 스펙 (JVMS)을 구현하고 있으며, 자바의 표준 에디션(SE)을 제공한다. 또한 컴파일러, 디버깅, 테스팅, 모니터링, 문서화작업, 자바 라이브러리 등 자바 플랫폼에서 운영되는 소프트웨어 개발에 필요한 모든 것들을 포함하고 있다.

오라클이 현재 배포하는 자바 개발 키트는 최신버젼으로 JDK 20, 장기지원버젼으로 JDK 17 (2024년 9월까지 업데이트보장됨)가 있으며, 무료 사용 및 재배포가 가능한 No-Fee Terms and Conditions (NFTC)[3 https://www.oracle.com/downloads/licenses/no-fee-license.html] 라이선스로 윈도즈와 리눅스 환경으로 x64 바이너리 아키텍쳐를, 맥 OS와 리눅스를 대상으로 aarch64 바이너리 아키텍쳐를 제공한다.

구성 
JDK는 크게 6 가지 파일들로 구성되어 있으며, 파일 위치와 구성은 다음과 같다.

 실행 파일 (bin/): 자바 실행 환경 (Java Runtime Environment, JRE)을 구현한 것으로, JRE는 자바 가상머신, 클래스 라이브러리, 자바 언어로 작성된 프로그램 작동에 필요한 파일을 포함하고 있으며, 같은 위치에 프로그램 개발에 필요한 모든 툴과 유틸리티도 포함되어 있다.
 구성 파일 (conf/): 사용자 구성 옵션을 포함하고 있는 파일들로써, JDK 접근 권한 설정, 보안 알고리즘 변경, 자바 암호화 확장 정책 등을 설정할 수 있다.
 C 헤더 파일 (include/): 자바 가상머신 디버거인터페이스와 자바네이티브인터페이스의 네이티브 코드를 작성하는데 사용되는 C헤더 파일
 자바 모듈 (jmods/): jlink를 이용하여 사용자 지정 런타임을 만드는데 사용되는 모듈.
 저작권 및 라이선스 (legal/ ): 각 모듈에 대한 라이선스와 저작권에 대한 내용, 제삼자 제공 포함.
 추가 라이브러리 (lib/ ): JDK에 필요한 추가 클라스 라이브러리와 지원 파일 (외부 사용을 목적으로 하지 않음).

JDK의 핵심을 이루는 개발 툴들은 다음과 같다:
 appletviewer - 웹브라우저 없이 자바 애플릿을 실행하고 디버깅하기 위한 툴
 apt - 애너테이션 처리 툴
 extcheck - JAR 파일 충돌을 감지하는 툴
 idlj - IDL을 자바로 컴파일 해주는 툴. 주어진 자바 IDL 파일에 대한 자바 바인딩을 만들어 준다.
 java - 자바 응용 프로그램 로더. javac 컴파일러가 만든 클래스 파일을 해석 및 실행한다. 현재는 하나의 런처가 개발 및 배포에 동일하게 사용된다. 예전에 사용되던 배포용 런처 jre는 더이상 Sun JDK에서는 제공되지 않고, 이 로더로 대체되었다.
 javac - 자바 컴파일러. 자바 소스 파일을 바이트코드로 변환해준다.
 javadoc - 소스 코드 주석으로부터 자동으로 문서를 생성해주는 툴
 jar - 서로 관련있는 클래스 라이브러리들과 리소스들을 하나의 JAR 파일로 묶어주는 툴. Jar 파일을 관리하는데도 사용된다.
 javah - 네이티브 코드를 작성하는데 사용되는 C 헤더 및 스텁 생성기
 javap - 클래스 파일을 자바 소스 코드로 디스어셈블해주는 도구
 javaws - JNLP 응용 프로그램용 자바 웹 스타트 런처
 JConsole - 자바 모니터링 및 관리 콘솔
 jdb - 자바 디버깅 툴
 jhat - 자바 힙 분석 툴 (실험적인 기능)
 jinfo - 현재 실행중인 자바 프로세스나 크래쉬 덤프로부터 구성정보를 읽어들이는 툴 (실험적인 기능)
 jmap - 현재 실행중인 프로세스나 코어 덤프 파일로부터 공유 객체 메모리 맵이나 힙 메모리 정보를 보여주는 툴 (실험적인 기능)
 jps - 자바 가상 머신 프로세스 상태(Java Virtual Machine Process Status) 툴. 대상 시스템의 인스트루먼트 가능한 핫스팟 자바 가상 머신들의 목록을 보여준다. (실험적인 기능)
 jrunscript - 자바 명령 줄 스크립트용 셀
 jstack - 자바 쓰레드들의 스텍 트레이스를 보여주는 툴 (실험적인 기능)
 jstat - 자바 가상 머신 통계 모니터링 툴 (실험적인 기능)
 jstatd - jstat용 데몬 (실험적인 기능)
 keytool - 키스토어 관리용 툴
 pack200 - JAR 압축 툴
 policytool - 자바 실행 정책을 만들거나 관리하는 툴. 자바 실행시 다양한 곳으로부터 온 개개의 코드에 권한을 주거나 제한할 수 있다.
 VisualVM - 여러 자바 명령 줄 툴들에 대한 비주얼 UI를 제공해주고, 간단한 성능 및 메모리 프로파일링 기능을 포함한다.
 wsimport - 웹 서비스를 호출하기 위한 JAX-WS 아티팩트를 만들어준다.
 xjc - XML 바인딩용 자바 API(Java API for XML Binding, JAXB)의 일부. 주어진 XML 스키마에 대한 자바 클래스를 만들어준다.

현재 실험적인 기능인 툴들은 향후 버전의 JDK에서는 제공되지 않을 수도 있다.

JDK에는 또한 자바 실행 환경(Java Runtime Environment, JRE)이 포함된다. 이 JRE는 자바 가상 머신(Java Virtual Machine, JVM)과 프로덕션 환경에서 제공되는 모든 클래스 라이브러리 및 국제화나 IDL 라이브러리와 같이 개발자들에게 도움이 되는 라이브러리들로 구성된다.

그리고 자바 API의 거의 모든 부분들을 커버하는 다양한 예제 프로그램들이 JDK와 함께 제공된다.

같이 보기 
 자바 플랫폼
 클래스패스
 자바 버전 역사

각주

외부 링크 
 오라클 자바 SE

자바 (프로그래밍 언어)
오라클 소프트웨어
썬 마이크로시스템즈 소프트웨어
소프트웨어 개발 키트