Auxiliary Memory
  • Auxiliary Memory
  • Recent Changes
  • Disclaimer
  • general
    • Homelab
      • Planning
      • Configuring RPi
      • Dockerize Unifi Controller
      • Moving Unifi Controller to Bare Metal RPi
    • Lifehack
      • Coding on iPad
      • Faster internet with Cloudflare WARP
  • lifelog
    • Links
    • Movies
    • Books
      • Reading Queue
    • Public Memos
      • 2020 Memo
    • Yearly Records
      • Records of 2020
      • Records of 2019
  • books
    • The Rust Programming Language
    • Lambda Calculus
    • SICP
    • Introduction To Algorithms
      • 1.1. 알고리즘의 역할
      • 1.2. 시작하기
    • Linux System Programming 2/E
      • 1. 핵심 개념 소개
  • Programming
    • Git
    • When to refactoring?
    • Microservices
    • Functional Programming
      • ADT
      • Functor and Monads
    • OS
      • CPU Modes
    • Debugging
      • objdump
    • DevOps
      • How our infrastructure organized
      • Optimize Dockerfile
    • Spring Framework
    • Web
      • OAuth
        • Sign in with Apple
    • SQL
      • Prepared Statement
    • Programming Languages
      • TypeScript
      • Python
        • GIL
      • Rust
      • F#
        • Dos & Don'ts
      • Go
      • JVM
        • JVM memory structure
        • JVM GC
        • Kotilin
        • Java
          • Why main method should be static
  • My Environment
    • My Macbook
    • My Keyboards
    • My PyCharm
    • My CLI
      • iTerm2
      • Dotfiles
        • Refactoring .zshrc
      • Useful Commands
Powered by GitBook
On this page
  • JVM 메모리 구조
  • 힙 메모리 구조
  • 참조

Was this helpful?

  1. Programming
  2. Programming Languages
  3. JVM

JVM memory structure

PreviousJVMNextJVM GC

Last updated 4 years ago

Was this helpful?

JVM 메모리 구조

크게 힙 영역과 네이티브 영역으로 나뉨

힙 영역에는 객체등이 저장된다. GC가 관리하며 GC를 위해 세대가 나누어져 있다. OS가 관리하는 네이티브 영역에는 메타스페이스, 코드 캐시, 스레드 스택등이 올라간다.

힙 메모리 구조

보통은 Generational GC를 위해 크게 Young과 Tenured(Old) 로 나뉨. JDK 버전 7까지는 힙 내부에 Perm 영역이 있었지만 OOM 이슈가 발생하기 쉬운 문제 등으로 OS가 관리하는 네이티브 메모리 영역의 Metaspace로 옮겨졌다 자세한 건 을 참고하자.

GC와 관련된 내용은 를 참고하자

Young Gen.

마이너 GC를 수행하는 영역

Eden과 Eden을 정리할때 살아남은 객체들이 들어있는 Survivor 0/1 로 나뉜다.

Tenured Gen.

Major GC를 수행하는 영역

Young에서 넘어온다.

Region..?

CMS(Concurrent Mark-Swep) Collector, Parreral Collector, Serial Collector 등을 사용하면 메모리 영역이 Eden, Survivor 0/1, Old 등으로 딱딱 나뉘지만 G1 Collector를 사용할 경우에는 전체 메모리를 Region으로 나눈 후 각 리전에 역할을 부여하는 방식이기 때문에 경계가 명확하지 않다.

참조

기계인간님의 글
GC 문서
Java Memory 간단히 살펴보기 - J-Log
Visualizing memory management in JVM(Java, Kotlin, Scala, Groovy, Clojure) - Deepu K Sasidharan
JVM 메모리 구조와 GC - 기계인간 John Grib