Java의 동작원리

2025. 10. 13. 21:11·Java & Spring/Java

□ Java 동작 순서

출처 : https://asfirstalways.tistory.com/158

  1. 프로그램이 실행되면 JVM은 OS로부터 프로그램이 필요로 하는 메모리를 할당받는다.
    → JVM이 할당받은 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
  2. 자바 컴파일러가(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환시킨다.
  3. Class Loader를 통해 class파일들을 JVM으로 로딩한다.
  4. 로딩된 class파일들은 Execution Engine을 통해 해석된다.
  5. 해석된 바이트코드는 Runtime Data Area에 배치되어 실질적인 수행이 이루어지게 된다.
    → 이러한 실행과정 속에서 JVM은 필요에 따라 Thread Synchronization과 GC같은 관리작업을 수행한다.
    • Thread Synchronization : 여러 스레드가 공유자원에 동시에 접근할 때 데이터 일관성을 보장하기 위한 기법
    • GC(Garbage Collction) : 더 이상 참조되지 않는 객체를 JVM이 자동으로 메모리에서 해제하여 메모리 누수 방지와 효율적 메모리 관리를 수행하는 기능

□ JVM의 구조

출처 : https://namu.wiki/w/Java%20Virtual%20Machine

  1. Class Loader
    • JVM내로 클래스(.class)파일을 로드, 링크를 통해 배치하는 작업을 수행하는 모듈
    • Runtime 시에 동적으로 클래스를 로드
    • jar파일 내 저장된 클래스들을 JVM위에 탑재하고 사용하지 않는 클래스들은 메모리에서 삭제
  2. Runtime Data Area : 프로그램 수행을 위해 JVM이 운영체제로부터 할당받는 메모리 영역
  3. Execution Engine : 자바 바이트코드를 저수준 언어로 변환하여 실행하는 역할
    • InterPreter(인터프리터) : 바이트코드를 한 줄씩 읽어 즉시 실행
    • JIT(Just-In-Time) 컴파일러 : 바이트코드를 머신 코드로 컴파일 후 실행, 반복적으로 실행되는 코드를 미리 분석하고 최적화된 네이티브 코드로 변환
  4. Native Method Interface(JNI) : JVM에 의해 실행되는 코드 중 네이티브로 실행하는 것이 있다면 해당 네이티브 코드를 호출하거나 호출 될 수 있도록 만든 일종의 프레임워크
  5. Native Method Libraries : 네이티브 메소드 실행에 필요한 라이브러리

□ Runtime Data Area

출처 : https://velog.io/@wkdwoo/JVM-Runtime-Data-Area

  1. Method Area : JVM이 시작될 때 생성되는 공간으로 바이트코드가 이 영역에 저장
    → 클래스 정보, 변수 정보, static으로 선언한 변수가 저장되고 모든 스레드가 공유
  2. Heap : 동적으로 생성된 객체가 저장되는 영역
  3. Thread
    • Stack : 지역변수나 메서드의 매개변수, 임시적으로 사용되는 변수, 메서드의 정보가 저장되는 영역
    • PC Register : 현재 수행중인 JVM의 명령어 주소를 저장하는 공간
    • Native Method Stack : Java가 아닌 다른 언어로 작성된 코드를 위한 공간

'Java & Spring > Java' 카테고리의 다른 글

제네릭  (0) 2025.10.18
Java - 비동기처리(CompletableFuture)  (0) 2025.03.06
Java - 비동기 처리(ExecutorService / Future)  (0) 2025.03.04
Java - 비동기 처리(Thread & Runnable)  (0) 2025.03.04
HTTP 요청과 응답에 사용되는 클래스들  (0) 2025.02.06
'Java & Spring/Java' 카테고리의 다른 글
  • 제네릭
  • Java - 비동기처리(CompletableFuture)
  • Java - 비동기 처리(ExecutorService / Future)
  • Java - 비동기 처리(Thread & Runnable)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 이론공부
        • 개념
        • 정보처리기사 필기
        • 정보처리기사 실기 기출
        • 네트워크관리사 2급
        • SQLD
      • 시스템설계
      • Java & Spring N
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java N
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • 웹
      • git & github
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데이터 크기
    java 에라토스테네스의 체
    프로그래머스 java 기초트레이닝
    프로그래머스 java 기초 트레이닝
    java기초
    java 멤버
    데이터 타입
    java 메서드
    java
    개발로드맵
    자료구조
    java super
    Java this
    java 유클리드 호제법
    java 제어자
    java 세수의합
    Java 생성자
    java enhance switch
    java two-pointer
    java arrays.copyofrnage()
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
Java의 동작원리
상단으로

티스토리툴바