본문 바로가기
야미스터디/Java

[Java] JDK, JRE, JVM

by 의정부핵꿀밤 2022. 9. 4.
728x90

JDK (Java Development Kit)

JDK 구조

  • Java 개발 키트로, JVM, JRE와 개발을 위한 핵심 라이브러리를 갖고 있는 키트이다
  • JRE를 포함해 컴파일러, 디버거 등의 개발 도구를 포함하고 있다
  • 참고로 Java 8 버전 이후의 JDK는 유료화가 되어 보통 Java 개발 환경이 Java 8에 머무르고 있다고 한다

 

 

 

JRE (Java Runtime Environment)

  • JRE는 자바 구동 환경으로, 시스템 라이브러리와 JVM을 포함한다
  • 바이트 코드로 컴파일된 자바 코드를 실행하는 환경을 말한다
  • JVM은 단독으로 설치할 수 없고, JRE가 JVM을 담고 있다
  • JVM과 시스템 라이브러리를 이용하여 컴파일 된 자바 코드(바이트 코드)를 실행한다

 

 

 

JVM (Java Virtual Machine)

  • Java 어플리케이션을 클래스 로드를 통해 읽어들여, Java API와 함께 실행하는 역할을 한다
  • 실제 자바 프로그램의 실행 주체가 된다
  • JVM은 물리적 머신과 별개의 가상 머신으로 자바를 동작시키기 때문에 어떤 하드웨어서도 동일하게 동작이 가능하다
  • JVM의 특징
    • 스택 기반의 가상 머신 : 대표적인 컴퓨터 아키텍처인 인텔 x86이나 ARM 아키텍처 같은 하드웨어들은 레지스터 기반으로 동작하는 반면, JVM은 스택 기반으로 동작한다
    • 심볼릭 레퍼런스 : 기본 자료형(primitive data type)을 제외한 모든 타입(클래스와 인터페이스)을 명시적인 메모리 주소 기반의 레퍼런스가 아니라 심볼릭 레퍼런스를 통해 참조한다
    • 가비지 컬렉션(garbage collection): 클래스 인스턴스는 사용자 코드에 의해 명시적으로 생성되고 가비지 컬렉션에 의해 자동으로 파괴된다
    • 기본 자료형을 명확하게 정의하여 플랫폼 독립성 보장: C/C++ 등의 전통적인 언어는 플랫폼에 따라 int 형의 크기가 변하는 반면, JVM은 기본 자료형을 명확하게 정의하여 호환성을 유지하고 플랫폼 독립성을 보장한다
    • 네트워크 바이트 오더(network byte order): 자바 클래스 파일은 네트워크 바이트 오더를 사용한다. 인텔 x86 아키텍처가 사용하는 리틀 엔디안이나, RISC 계열 아키텍처가 주로 사용하는 빅 엔디안 사이에서 플랫폼 독립성을 유지하려면 고정된 바이트 오더를 유지해야 하므로 네트워크 전송 시에 사용하는 바이트 오더인 네트워크 바이트 오더를 사용한다. 네트워크 바이트 오더는 빅 엔디안이다.

 

 

 

 

Java 컴파일 과정

  1. 자바로 소스코드를 작성한다 -> .java 파일
  2. Build 작업을 통해 java 파일은 자바 컴파일러의 javac라는 명령어를 통해 .class 파일을 생성하는데, 이는 컴퓨터가 읽을 수 없고 JVM은 읽을 수 있는 자바 바이트 코드이다
  3. 이렇게 생성된 바이트 코드가 클래스 로더에 의해 JVM 안에 로드되고, 실행 엔진에 의해 기계어로 해석되어 메모리 상(Runtime Data Area)에 배치된다

 

https://yummy0102.tistory.com/510

 

[Java] Java 컴파일 과정 📌

기존 언어들의 문제점 기존 언어들은 사용자의 프로그램 실행 환경에 맞춰서 다양한 버젼의 프로그램 개발이 필요로 했다 또한 Windows에서 컴파일하여 생성한 실행파일은 오직 Windows머신에서만

yummy0102.tistory.com

자세한 컴파일 과정은 위 포스팅을 참고하세요😋

 

 

 

 

Java 코드 실행 과정

  1. 제일 먼저 main() 함수를 찾아서 있으면 클래스 로더가 실행을 시킨다.
  2. Static 영역에 import한 패키지들과 프로그램의 모든 클래스, 필드, 메서드 올라간다
  3. stack 영역에 main()의 stack frame이 위치한다. -> 지역변수는 초기화시 위치, 클래스 선언을 제외한 메서드의 {}undefined if{}이 생길 때마다 Stack Frame이 생성
  4. 메서드가 실행된다
  5. } 괄호를 만나면 Stack Frame이 사라지게 된다
  6. jre가 jvm을 종료시키고 위치했던 메모리들이 모두 없어진다
  7. 스택 프레임간에 는 데이터 접근이 불가능하지만, 내부의 스택 프레임은 외부의 스택프레임에 접근이 가능하다

 

 

 

 


참고)

https://minzoovv.dev/java/java-terminology/

 

JAVA JDK, JRE, JVM 그리고 컴파일 과정

JDK(Java Development Kit) Java 개발 키트로, JVM, JRE와 개발을 위한 핵심 라이브러리를 가지고 있는 키트이다. JRE를 포함해 컴파일러, 디버거 등 개발 도구를 포함하고 있다. 참고로 Java 8 버전 이후의 JDK

minzoovv.dev

 

728x90

댓글