[Java] JDK, SDK, JRE, SE, EE, ME, jvm 그게 뭔데!!!!

YoungHo-Cha·2021년 9월 27일
4

Java

목록 보기
6/7

자바 공부를 해보면서 분명히 j~~ , s ~~ 라고 알바벳 여러개를 본 적이 있을 것이다.

jdk 설치하라고 해서 했는데, 오잉? jre는 또 뭔데 ㅡㅡ

라고 생각한적 분명히 있을 것이다.

오늘은 이런 것들을 모두 다 정리해보자!


🚗목차

  • JRE
  • JDK
  • SDK
  • JAVA SE
  • JAVA EE
  • JAVA ME
  • JVM

🧐JRE

JRE는 Java Runtime Enviroment이다.

말 그대로 풀어쓰면 "자바 런타임 환경"이다.

🔎런타임 환경이란?

소프트웨어 프로그램을 실행하기 위해서는 실행할 환경이 필요하다. 런타임 환경은 프로그램 실행을 위해서 클래스 파일을 로드, 메모리 및 기타 시스템 리소스에 대한 액세스를 확보한다.

나는 이해하기 쉽게 운영체제 위에 소프트웨어(운영체제 역할을 하는)라고 생각한다!

🔎자바의 WORA

WORA란 "Write Once, Run Anywhere"의 약자이다. "한 곳에서 쓰고, 모든 곳에서 실행한다."라는 듯이다. 이 말을 이해하기 위해서 C를 예로 들어보자.

EX) C
C언어를 Window로 작성했을 경우, linux에서는 돌아가지 않는다. 이유는 "중계자(jvm)"가 없기 때문이다. 하지만 JAVA는 JVM이 어떠한 운영체제든 상관없이 해당 운영체제 위에서 돌아가면서 필요한 메모리작업들을 해준다. 그래서 JAVA는 Window나 linux 등등 다른 기타 운영체제에서 작성을 해도 작성 운영체제와 달라도 실행이 된다.

🔎자바 런타임 환경

소프트웨어는 시스템 하드웨어 위에 위치하는 일련의 계층이다. 각 계층은 그 위의 계층이 사용하거나 필요한 서비스를 제공한다.

자바 런타임 환경은 컴퓨터 운영체제 위에서 실행되며, 자바를 위한 부가적인 서비스를 제공하는 소프트웨어 계층이다.

대표적으로 "자동 메모리 관리"는 프로그래머가 메모리 할당과 재할당을 수동으로 조작할 필요가 없게 해주는 JRE의 대표적인 서비스이다!

🔎JRE와 JVM의 상호작용

자바 가상 머신(JVM)은 라이브 자바 프로그램 실행을 담당하는 실행 소프트웨어 시스템이다.

JRE는 자바 코드를 받아서 필요한 라이브러리와 결합한 다음 이 코드를 실행할 JVM을 시작하는 온디스크 시스템이다.

한마디로, JRE는 JVM, 기타 라이브러리 등등 JAVA실행에 필요한 작업을 하는 것이다.

🔎JRE 설치 및 사용

ORACLE 사이트에서 최신 JRE 버전을 다운로드할 수 있다.

JDK, JRE는 프로그래머가 자주 다루는 것이다. JRE는 자바 애플리케이션을 실행할 수 있게 해준다는 측면에서 자바 애플리케이션 사용자와 좀 더 관계가 깊다.


🧐JDK

JDK는 Java Development kit의 약어이다.

말 그대로, 자바 개발 키트이다. 위에서 언급된 JRE는 실행환경이다!

다음 그림을 보자.

JDK는 JRE + 개발 툴로 구성된다. Oracle은 자바 11부터 JDK만 제공하고, JRE는 제공하지 않는다.

🔎JDK 구조

자바 8 Docs의 구조이다.

🔎개발 툴 살펴보기.

jdk 개발 툴을 1개씩 살펴보자!

  • 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 스키마에 대한 자바 클래스를 만들어준다.


🧐SDK

SDK는 Software Development kit 이다.

일반적으로 소프트웨어 기술자가 사용하여
특정한 소프트 웨어 꾸러미, 소프트웨어 프레임워크, 하드웨어 플랫폼, 컴퓨터 시스템 게임기, 운영 체제 등을
위한 응용프로그램 등을 만들 수 있게 해주는 개발 도구의 집합이다.

자바의 SDK가 JDK이다.


🧐JAVA SE

JAVA SE는 java Standard Edition의 약자이다.

java의 표준 문법이다.


🧐JAVA EE

JAVA EE는 JAVA Enterprise Edition이다.

JAVA SE의 엔터프라이즈용이다. SE보다 확장된 기능을 제공한다.


🧐JAVA ME

JAVA ME는 JAVA Mobile Edition이다.

JAVA ME는 모바일 장치 및 내장형 장치에서 실행하는 응용 프로그램에 환경을 제공한다.


🧐JVM

JVM은 Java Virtual Machine이다.

자바 바이트코드를 실행할 수 있는 주체이다.

JVM은 Class Loader, Runtime Data Area, Execution Engine으로 구성된다.

🔎클래스 로더 시스템(Class Loader)

  • 컴파일 후 생성되는 .class 파일에서 바이트 코드를 읽어온다! 그리고 메모리에 분산 저장시키는 역할을 수행한다.

  • 클래스의 인스턴스를 생성하면 클래스 로더를 거치면서, 메모리에 로드된다.

  • 클래스 로더 시스템은 로딩, 링크, 초기화 과정을 거친다.

  • 로딩 : 클래스를 읽어온다.

  • 링크 : 레퍼런스를 연결한다.

  • 초기화 : static 값들을 초기화하고, 변수에 할당한다.

🔎메모리(Runtime Data Area)

  • JVM이 프로그램을 수행하기 위해서 OS로부터 할당받는 메모리 공간이다.

  • Method 영역 : 변수 이름, 데이터 타입, 접근 제어자 정보, 필드 정보, 메소드 이름, 리턴 타입, 파라미터, type 정보, static 변수등이 생성되는 영역이다.

  • Heap 영역 : new 키워드로 생성된 객체와 배열이 생성되는 영역이다.

  • JVM Stack 영역 : 지역 변수, 파라미터, 리턴 값, 연산에 사용되는 값 등이 생성되는 영역이다.

  • PC Register : 쓰레드 생성 시, 생성되는 영역이다. 현재 쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역이다. 쓰레드를 돌아가면서 수행할 수 있게 도와준다. 각 쓰레드마다 존재한다.

  • Native Method Stack : 자바 외 언어 코드를 위한 메모리 영역이다.

🔎실행 엔진

  • 실행 엔진은 클래스 로더가 런타임 영역에 배치한 바이트 코드(.class)를 실행하는 역할을 한다.

  • 인터프리터 : 바이트 코드를 한줄 씩 기계어로 변경한다.

  • JIT 컴파일러 : 인터프리터 효율을 높이기 위해서, 인터프리터가 반복되는 코드를 발견하면 JIT컴파일러로 반복되는 바이트 코드를 모두 네이티브 코드로 바꾼다. 캐싱을 이용한다.

  • GC : 가비지 컬렉터이다. 더 이상 참조되지 않는 객체를 정리한다.

🔎네이티브 메소드 인터페이스

  • 자바에서 C, C++, 기타로 작성된 함수를 사용가능하도록 한다.

📋마치며

완벽히 명쾌하게 정리한 기분이 아니다.

하나씩 실제 코드를 예시로 들어가며 보충해야겠다!


🧷Reference

profile
관심많은 영호입니다. 궁금한 거 있으시면 다음 익명 카톡으로 말씀해주시면 가능한 도와드리겠습니다! https://open.kakao.com/o/sE6T84kf

0개의 댓글