본문 바로가기

백엔드 면접준비/Java

1.JVM

1. JDK, JRE, JVM

 

JDK, JRE, JVM

JDK

  • 자바 개발환경으로 자바 어플리케이션을 개발하기 위해 필요한 도구를 제공한다.
  • 자바 언어를 바이트 코드로 컴파일 해주는 자바 컴파일러(javac), 자바 클래스 파일을 해석해주는 역어셈블리어(javap) 등이 있다.

JRE

  • 자바 실행환경으로 JVM, 자바 클래스 라이브러리, 기타 자바 어플리케이션 실행헤 필요한 파일들을 포합한다.

JVM

  • 자바 가상 머신으로 자바 어플리케이션을 실행하는 가상 머신이다. 실제 컴퓨터로 부터 Java어플리케이션 실행을 위한 메모리를 할당받아 Runtime Data Area를 구성한다.

 

2. Runtime Data Area 

Runtime Data Area

 

자바 가상 머신은 프로그램 실행 중 다양한 런타임 데이터 영역을 사용한다. 런타임 데이터 영역은 모든 스레드들이 공유하는 영역과 스레드 별 할당되는 영역으로 구분된다. JVM을 시작하면 Heap 영역과 Method 영역이 생성되며 해당 영역들은 모든 스레드들이 공유한다. 각 스레드가 시작 될 때마다 스레드마다 PC Register, Stack, Navtive Method Stack이 생성되며 스레드가 종료될 때 사라진다. 마지막으로 모든 스레드들이 실행되고 종료되면 JVM이 종료되면서 Heap 영역과 Method 영역도 사라진다.

 

Stack

  • 지역 변수, 함수의 실행 결과를 저장하며 함수 호출과 반환을 담당한다.
  • 생명주기 : 쓰레드 시작 ~ 종료(쓰레드별 별도 관리)

 

Heap

  • 클래스의 인스터스들과 배열들이 저장되는 공간이다. 
  • 가비지 컬렉션라는 동적 메모리 관리 시스템에 의해 관리된다. 
  • 힙 구성 방식, 가비지 컬렉션의 알고리즘은 JVM 구현체의 재량으로 자유롭게 구성된다.
  • 생명주기 : 프로그램 시작 ~ 종료(GC대상)

 

Method(Static)

  • 런타임 상수 풀, 필드, 함수, 코드 등 클래스와 인터페이스의 구조가 저장되는 공간이다.
  • 생명주기 : JVM 실행 ~ JVM 종료

 

Runtime Constant Pool

  • 런타임 상수 풀은 클래스, 인터페이스 마다 존재하며 클래스 파일의 constant pool 테이블 영역이 저장되는 공간이다.
  • 각 클래스, 인터페이스의 전역 변수, 함수, 인스턴스 변수, 함수에 대한 심볼릭 링크가 존재한다.
  • 전역 변수와 전역 함수는 컴파일 시점에 할당되어 고정된 값으로 존재하며 인스턴스 변수와 인스턴스 함수는 심볼릭 링크로 존재하며 실행 시점에 고정된 주소로 변환된다.
  • 런타임 상수 풀은 클래스가 생성되어 Heap에 할당될 때 만들어지며 클래스가 삭제되면 사라진다.

3. Java 동작원리 

Java 동작원리

 

실행순서

  1. 자바 프로그램이 시작되면 JVM은 OS로부터 이 프로그램이 필요로하는 메모리를 할당받는다.
    JVM은 이 메모리를 용도에 따라 영역을 나눠 관리한다.
  2. Java Compiler 가 자바 소스코드(*.java)를 읽어들여 자바 바이트 코드(*.class)로 변환시킨다.
  3. Class Loader 를 통해 class 파일들을 JVM으로 로딩한다.
  4. 로딩된 class 파일들은 Execution engine 을 통해 해석된다.
  5. 해석된 바이트 코드는 Runtime Data Area 에 배치되어 실질적인 수행이 이뤄지게 된다.