JVM

JVM 이란?

  • 시스템 메모리를 관리하면서 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경을 제공한다. 한마디로 JVM은 자바 애플리케이션을 실행하는 프로그램이다. 이를 통해 자바는 OS 에 종속되지 않고, JVM이 존재한다면 실행 가능하다. Stack 기반의 가상 머신이다.

실행과정

  1. 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로하는 메모리를 할당받는다. JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
  2. 자바 컴파일러가 자바 소스코드를 읽고 바이트 코드로 변환한다.
  3. 변환된 바이트 코드를 클래스 로더를 통해 JVM 메모리 영역으로 로딩된다.
  4. 로딩된 class 파일들은 Excution Engine을 통해 해석되고
  5. 해석된 바이트 코드는 메모리 영역에 배치되어 실질적인 수행이 이뤄진다. 이러한 과정 속 JVM은 필요에 따라 스레드 동기화난 가비지 컬렉션 같은 메모리 관리 작업을 수행한다.

JVM 런타임 데이터 영역

모든 스레드가 공유하는 영역

  • 메서드(스태틱) 영역
    • 크게 두가지 영역으로 나뉠 수 있음
      • 코드 세그먼트
        • 바이트코드로 변환되어 이 영역에 들어간다.
      • 데이터 세그먼트
        • static 데이터가 정의되는 영역
    • 메서드의 바이트코드, static 변수가 할당된다.
  • 힙 영역
    • 배열과 모든 인스턴스 객체가 할당되는 영역으로 자동 초기화가 진행된다.

스레드마다 가지는 영역

  • 스택 영역
    • 지역변수, 매개변수가 할당되는 영역으로 초기화가 진행되지 않는다.
  • PC Resisters
    • 현재 실행되고 있는 주소를 저장하고 있는 영역
  • Native Method Stacks
    • c나 c++로 작성된 메서드를 실행할 때 사용되는 스택

  • 스레드는 하나의 heap, method Area를 공유하고있다.
    그러나 하나의 스레드는 다른 스레드의 내부 데이터에 접근 할 수 없다.
    우리가 하나의 메서드 안에서 지역변수의 동시성 문제를 걱정하지 않아도 되는 이유가 바로 이것!

'Computer science > JAVA' 카테고리의 다른 글

Error & Exception  (0) 2023.03.16
GC  (0) 2023.03.16
Instrinsic Lock  (0) 2023.01.08
Thread  (1) 2023.01.02
Casting  (0) 2023.01.01

+ Recent posts