[JAVA] JVM

2023. 8. 1. 14:01·Programming Language/JAVA

JVM(Java Virtual Machine)

  • 자바 가상 머신
  • 운영체제에 종속적이다.
  • 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애받지 않고 프로그램을 실행할 수 있도록 도와줌
  • 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행하며, 다른 하드웨어와 다르게 레지스터 기반이 아닌 스택 기반으로 동작

 

자바 프로그램의 실행 단계

  1. 자바 컴파일러에 의해 자바 소스 파일은 바이트 코드로 변환됨
  2. 바이트 코드를 JVM에서 읽어 들인 다음에, 복잡한 과정을 거쳐 어떤 운영체제 간에 프로그램을 실행할 수 있도록 만드는 것

⇒ 만약, 자바 소스 파일은 리눅스에서 만들었고 윈도우에서 이 파일을 실행하고 싶다면, 윈도우용 JVM을 설치만 하면 됨

 

JVM 메모리 구조

  • 자바 프로그램의 실행 단계
  • Garbage Collector, Execution Engine, Class Loader, Runtime Data Area로, 4가지로 나뉨

  • 자바 소스 파일은 자바 컴파일러에 의해서 바이트 코드 형태인 클래스 파일이 됨
  • 그리고 클래스 파일은 클래스 로더가 읽으며 JVM이 수행됨

(1) Class Loader

  • JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈
  • 런타임 시에 동적으로 클래스를 로드함

(2) Execution Engine

  • 클래스 로더를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드들을 명령어 단위로 읽어서 실행

(3) Garbage Collector

  • 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 함

(4) Runtime Data Area

  • JVM의 메모리 영역
  • 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역
  • Method Area, Heap Area, Stack Area, PC Register, Native Method Stack

(1) Method area

  • 모든 쓰레드가 공유하는 메모리 영역
  • 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드를 보관

(2) Heap area

  • 모든 쓰레드가 공유하며, new 키워드로 생성된 객체와 배열이 생성되는 영역
  • 메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역

(3) Stack area

  • 메서드 호출 시마다 각각의 스택 프레임(그 메서드만을 위한 공간)이 생성
  • 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장함
  • 메서드 수행이 끝나면 프레임별로 삭제함

(4) PC Register

  • 쓰레드가 시작될 때 생성되며, 생성될 때마다 생성되는 공간으로 쓰레드마다 하나씩 존재
  • 쓰레드가 어떤 부분을 무슨 명령으로 실해해야할 지에 대한 기록을 하는 부분으로 현재 수행중인 JVM 명령의 주소를 가짐

(5) Native method stack

  • 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역

 

 

출처 : https://steady-coding.tistory.com/305

저작자표시 비영리 변경금지 (새창열림)

'Programming Language > JAVA' 카테고리의 다른 글

[JAVA] 지역 변수 & 전역 변수 & static(정적) 변수  (0) 2023.08.15
[JAVA] 인터페이스(interface)  (0) 2023.08.12
[JAVA] 가비지 컬렉션(Garbage Collection)  (0) 2023.08.01
[JAVA] Stream(스트림)  (0) 2023.07.19
[JAVA] 람다식  (0) 2023.07.19
'Programming Language/JAVA' 카테고리의 다른 글
  • [JAVA] 인터페이스(interface)
  • [JAVA] 가비지 컬렉션(Garbage Collection)
  • [JAVA] Stream(스트림)
  • [JAVA] 람다식
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    python
    CS
    스프링
    플러터
    시큐리티
    spring
    JPA
    springboot
    프로그래머스
    스프링부트
    Linux
    백준
    DB
    데이터
    Spring Security
    Flutter
    pcce 기출문제
    리눅스마스터 1급
    리눅스마스터
    데이터베이스
    programmers
    자바
    Oracle
    Java
    postgresql
    CS지식
    리눅스
    backjoon
    스프링 부트 쇼핑몰 프로젝트 with JPA
    baekjoon
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[JAVA] JVM
상단으로

티스토리툴바