본문 바로가기
Java

간략한 JVM에 대한 개념..

by 매트(Mat) 2021. 5. 17.
인프런 - 강좌

JVM, JRE, JDK

캡처

JVM (Java Virtual Machine)

  • 자바 가상 머신으로 자바 바이트 코드(.class)를 각 OS에 특화된 코드로 변환(인터프리터, JIT 컴파일러)하여 실행한다.
  • 그래서 OS에 종속적이다.

JRE (Java Runtime Environment)

  • JVM + 라이브러리
  • 자바 애플리케이션을 실행시키기 위한 환경이다.
  • 즉, 실행시키기 위한 것이지 이것으로 개발을 할 순 없다.

JDK (Java Development Kit)

  • JRE + 개발에 필요한 툴
  • 자바 11부터는 JRE를 따로 제공하지 않는다.
  • 애초에 개발자들은 개발을 해야하기 때문에 JDK를 설치해야 한다.


JVM 내부 구조

캡처

메모리

  • 메소드 영역에는 클래스 수준의 정보(클래스 이름, 부모 클래스 이름, 메소드, 변수, static) 저장, 공유의 자원이다. 즉, 다른 영역에서도 참조할 수 있는 영역이 메모리 영역이다.
  • 힙 영역에는 객체(Object)들이 저장이 된다.
  • 스택 영역에는 힙 영역에 생성된 객체의 참조값이 할당된다. 그리고 원시타입의 데이터가 할당된다.
  • 스택 영역에는 각 스레드마다 런타임 스택을 만들고, 그 안에 메소드를 스택으로 쌓아올린다. 그리고 쓰레드가 종료되면 런타임 스택도 사라진다.

Execution Engine

  • 인터프리터가 바이트 코드를 한줄 한줄씩 읽어 실행한다. 하지만 문제점이 읽을 때 같은 바이트 코드를 계속 한 줄씩 읽어나간다는 것이다.
  • 그래서 인터프리터의 효율을 높이기 위해 JIT 컴파일러를 사용한다.
  • 이 JIT 컴파일러는 반복적인 바이트 코드를 모두 네이티브 코드로 변환해준다. 즉, JIT 컴파일러는 바이트 코드를 네이티브 코드로 변환시켜주고 인터프리터는 그 변환된 네이티브 코드를 실행시켜주는 것이다.
  • GC(Garbage Collector)는 더 이상 참조되지 않은 객체들을 모아서 없애버리는 역할을 한다.

JNI (Java Native Interface)

  • 자바 애플리케이션에서 C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법을 제공한다.

클래스 로더

캡처
  • 클래스 로더가 .class인 파일을 읽고 바이너리 데이터를 만들어서 메소드 영역에 저 장을 한다. 메소드에 저장하는 데이터는 다음과 같다.
    • FQCN(Fully Qualified Class Name): 클래스가 속한 패키지명을 모두 포함한 이름
    • 메소드, 변수
    • 인터페이스, Enum, 클래스
  • 로딩이 끝나면 해당 클래스 객체를 힙 영역에 저장을 한다.


References

'Java' 카테고리의 다른 글

[자바 라이브 스터디] 01. JVM과 자바 코드  (0) 2021.09.15
[자바 라이브 스터디] 00. 자바 기본 공부 계획  (0) 2021.09.13
클래스 활용  (0) 2020.09.09
상속 기초  (0) 2020.09.09
클래스 기초  (0) 2020.09.06

댓글