자바의 메모리 관리

이준영·2023년 1월 17일
0

Stack

  • Primitive 타입(원시타입) - byte, short, int, long, double, float, boolean, char 타입의 데이터들이 할당된다.

  • 데이터와 실제값이 stack에 같이 할당된다. 

  • Heap 영역에 생성된 Object 타입의 데이터를 참조하는 레퍼런스 변수로도 할당된다.

  • 지역변수들은 scope 에 따른 visibility 를 가진다.

  • 각 Thread 는 자신만의 stack 을 가진다.

Heap

  • Object타입 – String, Integer, ArrayList, Character, Byte, Boolean, Long, Double, Float, Short … 타입의
    데이터들이 할당됨
  • Thread가 많아도 단 하나의 heap영역만 존재한다.
  • Heap 영역에 있는 오브젝트들을 가리키는 레퍼런스 변수는 stack에 저장
  • Object타입은 immutable하기 때문에 새로운 연산이 적용되면 새로운 Object가 heap에 추가로 할당된다.

Primitive 타입 예시


Object타입 예시

Garbage Collection

Mark and Sweep 이라고도 말한다.
JVMGarbage Collector 가 스택의 모든 변수를 스캔하면서 각각 어떤 Object를 레퍼런스 하고 있는지 찾는 과정이 Mark.
Marking 작업을 할때는 모든 thread가 중단된다. -> stop the world
이 과정을 통해 mark 되어있지 않은 Object들은 Heap에서 제거한다. -> Sweep

즉 따로 garbage들을 수집, 제거하는 것이 아니라 mark를 보고 판단하여 즉각적으로 제거 과정이 이루어 진다.

0개의 댓글