☕ JVM의 Stack & Heap 구조 정리

도두맨·2025년 6월 20일

공부

목록 보기
17/23

무민의 JVM Stack & Heap를 보고 정리한 내용입니다.


📌 C/C++와 JVM의 비교

✅ C/C++

  • 컴파일 타임에 플랫폼에 종속
    • OS, CPU 아키텍처에 따라 바이너리가 달라짐
  • 배포 시 문제 발생
    • Linux에서 컴파일한 실행 파일은 Windows에서 실행되지 않음
  • 해결책: 크로스 컴파일(Cross Compile)
    • 타겟 플랫폼을 명시하고 해당 환경에 맞는 실행 파일을 미리 컴파일

✅ Java (JVM 기반)

  • 컴파일 결과: 바이트코드(.class)
    → 플랫폼 독립적인 중간 코드
  • 실행: JVM 위에서 동작
    → JVM만 해당 플랫폼에 맞춰 설치되어 있으면 실행 가능
  • 장점: WORA (Write Once, Run Anywhere)
    → 자바는 네트워크 환경과 다양한 디바이스를 고려해 설계됨

🧠 JVM Runtime Data Areas

JVM은 자바 바이트코드를 실행하기 위해 다양한 메모리 영역을 사용합니다.

JVM Memory


📌 1. Method Area

  • 클래스 구조 정보 저장 (클래스명, 상속, 필드, 메서드 등)
  • JVM이 .class 파일을 읽으면 이곳에 저장
  • 모든 스레드에서 공유

📌 2. Heap

  • 런타임 중 생성되는 모든 객체가 저장되는 공간
  • new 연산자, 배열 등 객체 인스턴스 보관
  • GC(Garbage Collector)가 관리
  • 모든 스레드에서 공유

📌 3. Stack

  • 스레드마다 독립적인 JVM Stack 존재
  • 메서드 호출 시마다 Stack Frame이 생성되며, 종료 시 제거

🔹 Stack Frame 구성

구성 요소설명
Local Variable Array지역 변수 저장 (파라미터 포함)
Operand Stack연산 중간 결과 저장
Frame Data예외 처리, 상위 호출 메서드 정보 등

📌 4. PC Register

  • 현재 실행 중인 바이트코드의 주소를 저장
  • JVM이 이 값을 보고 어떤 명령을 실행할지 판단
  • 스레드마다 하나씩 존재

📌 5. Native Method Stack

  • JNI(Java Native Interface) 기반 메서드 실행 시 사용
  • System.gc() 등 C/C++로 구현된 native 메서드 실행 영역

✅ 보충 설명

🔧 왜 JVM인가?

C/C++도 크로스 컴파일이 가능하지만 JVM은 다음과 같은 이점이 있습니다:

  • 보안성: 바이트코드 검증 → 위험한 코드 방지
  • 성능 최적화: JIT(Just-In-Time) 컴파일러로 런타임에 최적화
  • 메모리 관리 자동화: GC(Garbage Collector) 지원

✨ 마무리 요약

항목C/C++Java (JVM)
컴파일 결과바이너리바이트코드(.class)
실행 환경OS+CPU 직접JVM 위에서 실행
이식성낮음높음
메모리명시적 관리GC 자동 관리
보안낮음 (포인터 등 위험 존재)높음 (JVM 검증)

0개의 댓글