TIL_JVM 구조와 동작 원리_241208

2024. 12. 9. 02:39·Spring 단기심화 2기
  • C/C++ 은 컴파일 플랫폼과 타겟 플랫폼이 다르다면 프로그램이 동작하지 않는다.
  • 이와 다르게 자바는 JVM을 통해 타겟 플랫폼과 상관없이 컴파일된 소스코드(Java Bytecode)가 동작하도록 설계했다.
  • WORA(Write Once, Run Anywhere)

Java 소스코드의 변환 과정

  1. Java Compiler(javac)를 통해 소스코드를 분석 : Source Code(.java) -> Java Bytecode(.class)
  2. JVM 실행 : Java Bytecode(.class) -> Target Assembly Program
  • bytecode는 JVM이 알아들을 수 있는 명령어 집합이고 JVM은 bytecode를 기계어로 번역해 CPU에게 일을 시킴

JVM 구조

Class loader

Runtime Data Area

  • JVM이 Java bytecode를 실행하기 위해 사용하는 메모리 공간

    Method Area

  • 모든 스레드 공유
  • 클래스 로더가 클래스 파일을 읽어오면 클래스 정보(필드, 메서드, 정적 정보)를 파싱해서 저장

    heap

  • 모든 스레드 공유
  • 런타임 환경에서 생성되는 모든 객체를 저장
  • 여기서 GC가 동작

    Java stacks

  • Per Thread
  • 메서드를 실행하기 위한 정보 저장

    pc registers

  • Per Thread
  • pc = program counter
  • 현재 실행되고 있는 명령어의 주소를 저장

    native method stacks

  • 성능 향상을 목적으로 Java Bytecode가 아닌 다른 언어로 작성된 메서드를 저장

JVM 동작

  1. 컴파일러가 Java 소스코드(.java)를 컴파일해서 클래스 파일(.class)파일을 생성
  2. 클래스 파일을 실행하면 JVM이 Class Loader를 통해 클래스 파일을 읽어들임
  3. 클래스 파일에 들어있는 정보가 클래스 로더에 의해 Method Area 에 올라감
  4. JVM이 Runtime Data Area를 구성
  5. Execution Engine이 bytecode를 읽고 실행
  6. Garbage Collection 자동 실행되 메모리를 효율적으로 관리

REF

무민의 JVM Stack & Heap
어썸오의 JVM Memory Layout

저작자표시 비영리 변경금지

'Spring 단기심화 2기' 카테고리의 다른 글

TIL_Annotation_241221  (1) 2024.12.21
TIL_MapStruct_241219  (1) 2024.12.20
TIL_HTTP 메서드의 멱등성_241205  (0) 2024.12.05
TIL_대규모 스트림 처리에서의 데이터 일관성 유지_241205  (0) 2024.12.05
TIL_OSIV_241129  (0) 2024.11.29
'Spring 단기심화 2기' 카테고리의 다른 글
  • TIL_Annotation_241221
  • TIL_MapStruct_241219
  • TIL_HTTP 메서드의 멱등성_241205
  • TIL_대규모 스트림 처리에서의 데이터 일관성 유지_241205
l'avenirJun
l'avenirJun
  • l'avenirJun
    오늘도 꾸준히 개발
    l'avenirJun
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 📚 개발자의 서재 N
        • 객체지향의 사실과 오해
        • Good Code, Bad Code
        • 도메인 주도 개발 시작하기 N
      • 🔧 트러블 슈팅
      • Java
      • Spring
      • 운영체제
        • 공룡책 학습
      • 알고리즘
      • GIT
      • 면접 지식
      • Spring 단기심화 2기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    책임-주도 설계
    코딩트리조별과제
    일반화
    도메인 모델
    애그리거트
    협력
    코드트리
    인터페이스
    가독성
    good code bad code
    메시지
    역할
    티스토리챌린지
    코딩테스트
    객체
    코드 계약
    매핑 구현
    타입
    specification
    객체지향의 사실과 오해
    모듈화
    애그리거트 루트
    리포지터리
    캡슐화
    도메인 주도 개발 시작하기
    추상화
    책임
    DIP
    오블완
    유스케이스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
l'avenirJun
TIL_JVM 구조와 동작 원리_241208
상단으로

티스토리툴바