[면접 질문] JVM의 구조와 원리

TraceofLight·2023년 6월 15일
0

InterviewStudy

목록 보기
7/11
post-thumbnail

23-06-27 미작성 내용 보충
23-07-01 내용 보충 및 작성 완료

Java 개요

1. Java의 개발 철학

Write Once, Run Anywhere

  • 플랫폼과 독립적인 언어를 지향
  • 같은 언어로 짜여진 코드를 어떤 운영 체제에서든 실행시킬 수 있는 것을 초점으로 두고 개발됨 (일종의 크로스 플랫폼)

2. JDK

  • Java Development Kit
    자바 개발 툴이며 JRE, JVM을 전부 포함한다. 기본적으로 자바로 만든 프로그램만 실행하면 되는 사용자와 달리 개발자는 JDK를 설치해야 한다. JDK는 Compiler를 포함하고 있다.

  • Java Runtime Environment
    자바 실행 환경으로 Java Class Library, Java Class Loader, JVM을 포함하고 있다. 클래스 로더와 라이브러리를 통해 작성된 자바 코드를 라이브러리와 결합하여 JVM에서 구동할 수 있도록 한다.

  • Java Virtual Machine

JVM이란?

  • Java Virtual Machine, 자바 가상 머신.
  • 자바 프로그램 실행 환경을 조성해주는 소프트웨어

Java Code → Compiler → 기계어

애플리케이션 실행을 위한 메모리를 할당 받아서 Java Runtime Data Area를 구축한다.

Runtime Data Area

  • Heap 영역
  • Method 영역

위 2개의 영역은 모든 Thread가 공유

  • PC Register
  • Native Method Stack
  • Stack 영역

위 3개의 영역은 Thread마다 시작 시에 생성, 종료 시 없어진다.

각 영역별 세부 사항

1. Heap

  • 클래스의 인스턴스, 배열이 저장되는 공간
  • 동적 메모리 관리 시스템 'Garbage Collection'

2. Method

  • 클래스, 인터페이스의 구조를 저장하는 공간

3. Stack

  • C의 스택 구조와 유사하며, 지역 변수 및 함수의 실행 결과를 저장
  • 함수의 호출과 반환을 담당하며 Stack Frame을 가진다.
  • Stack Frame 이란?

    각 함수마다 함수의 호출 정보가 포함된 구분된 공간
    Frame은 LIFO 방식으로 처리됨
    여유 공간이 없을 때 프레임이 추가될 경우 → Stack Overflow 발생
    프롤로그, 에필로그를 활용한 포인터 방식으로 스택 복귀 위치 확인

4. Native Method Stack

  • C, CPP로 작성된 메서드의 실행 스택
  • 코드 실행 시 Native Method Stack이 할당됨
  • StackOverflowError나 OutOfMemoryError 발생할 수 있음
  • 동적으로 스택의 크기를 조정할 수 있음

5. PC Register

  • 각 스레드마다 PC Register를 보유
  • 스레드가 현재 할당된 명령을 실행할 때 명령의 주소를 기록
  • 명령마다 값을 꾸준히 변동시켜 가리키는 값을 실행하도록 함

참고

JVM Document
고랭이님의 블로그
sgwon1996님의 velog

profile
24시간은 부족한 게 맞다

0개의 댓글