[Java] 인스턴스(Instance)와 메모리 관리

해니·2024년 10월 18일
0

Java

목록 보기
20/34
post-thumbnail

인스턴스(Instance)

  • 클래스라는 (객체를 만들기 위한) 틀을 통해 만들어진 구체적인 객체 (실체)
  • 주로 객체가 메모리에 할당되어 실제로 생성되었음을 강조할 때 사용된다.

ex) 🥐 붕어빵을 예시로 들면,
붕어빵 틀은 붕어빵을 만들기 위한 도구일 뿐 실제 붕어빵이 아니다.
붕어빵 틀(클래스)를 통해 만들어진 실제 붕어빵이 인스턴스에 해당된다.

// 객체 생성
// Car 클래스는 객체를 생성하기 위한 틀이며, car1과 car2는 각각의 인스턴스이다.
Car car1 = new Car("Tesla Model S", 2020);
Car car2 = new Car("BMW i8", 2019);



메모리 관리

Heap 메모리 개념

  • 자바 가상 머신(JVM)이 객체를 저장하기 위해 사용하는 메모리 영역
  • 객체와 인스턴스는 힙 메모리에서 관리된다.
  • 객체가 생성되면 힙 메모리에 저장되고, 객체의 참조는 스택 메모리에 저장됩니다.


이미지 출처 :: https://unicminds.com/what-are-stack-and-heap-memory/



Heap 메모리 구조


Young 영역(Young Generation)

  • 새로 생성된 객체들이 할당되는 영역
  • 빈번한 Minor GC가 발생한다.
  • Eden 영역과 두 개의 Survivor 영역(S0S1)으로 나뉜다.
    • Survivor 영역은 최소 GC 1번 이상 살아남은 객체가 존재하며, S0 또는 S1 둘 중 하나는 꼭 비어 있어야 한다.

🧹 Minor GC

  • 주로 Young 영역(Young Generation)에서 수행되며, 새로 생성된 객체들을 관리한다.
  • 객체들은 처음에 Eden 영역에 할당되고, 일정 주기마다 살아남은 객체는 Survivor 영역(s0, s1)을 번갈아가며 이동하며 Compact 과정을 거치고 최종적으로 Old 영역(Old Generation)으로 이동한다.

Old 영역(Old Generation)

  • Young 영역에서 살아남은 객체가 복사되는 영역
  • Young 영역보다 크게 할당되며, 영역의 크기가 큰 만큼 가비지는 적게 발생한다.
  • Old 영역에 대한 가비지 컬렉션(Garbage Collection)을 Major GC 또는 Full GC라고 부른다.
    • Major GCOld 영역(Old Generation)의 메모리가 부족해지면 발생하게 된다.
    • Major GC는 일반적으로 Minor GC보다 시간이 오래걸리며, 10배 이상의 시간을 사용하며, Stop-The-World 문제가 발생하게 된다.

⛔️ Stop-the-world

  • GC를 수행하기 위해 JVM이 프로그램 실행을 멈추는 현상
  • GC를 실행하는 Thread를 제외한 모든 ApplicationThreadGC 종료 전까지 일시정지 된다.

다양한 가비지 컬렉션 알고리즘이 존재하며 상황에 따라 필요한 GC 방식을 설정해서 사용할 수 있다. 관련 내용은 다음에 계속..🥹🫧





출처
[자바] 인스턴스(Instance)란?
자바 객체와 인스턴스의 차이점 이해하기
[Java] 클래스와 객체(1)
JAVA8 이후의 heap 메모리 구조와 GC 알고리즘
JVM Garbage Collection (GC) 핵심개념 알아보자
☕ 가비지 컬렉션 동작 원리 & GC 종류 💯 총정리

profile
💻 ⚾️ 🐻

0개의 댓글