경계의 경계

자바의 메모리 관리 본문

Java

자바의 메모리 관리

gigyesik 2024. 2. 13. 02:01

메모리 관리란 무엇인가

자바에서 메모리 관리란 객체를 메모리 공간에 할당, 할당 해제하는 프로세스를 말한다.

자바에는 Garbage Collector 라는 프로세서가 메모리 관리를 자동으로 수행해주지만, 동작에 대해 알아둘 필요는 있다.

  • JVM (Java Virtual Machine) 메모리 구조
  • Garbage Collector 의 동작

자바의 메모리 구조

JVM 은 프로그램 런타임에 다양한 데이터 공간을 형성한다.

힙 (Heap)

  • 힙은 실제 객체를 저장하는 메모리 공간이다.
  • 힙에는 모든 클래스와 배열이 담기고, 크기는 시스템 설정에 의존한다.
  • JVM은 프로그램 실행시 설정값에 따라 힙을 초기화하여 가지고 있다가, new 키워드를 만나면 객체를 힙에 할당한다.
  • 프로그램 실행 동안 힙은 하나만 존재한다.
  • 힙 공간에 대한 Garbage Collecting 은 강제이다.
Scanner sc = new Scanner(System.in);

Scanner 객체를 선언하는 순간 객체는 힙에 담기고, 할당된 변수명인 sc는 스택에 푸시된다.

메서드 공간 (Method Area)

  • 객체의 논리적 공간을 저장하는 메모리 공간이다.
  • 크기는 시스템 설정에 의존한다.
  • 클래스 구조, 메서드, 생성자, 인터페이스 등 객체의 논리적 구성 요소를 저장한다.
  • 메서드 공간의 Garbage Collecting 은 강제가 아니다.

스택 (JVM Stacks)

  • 스레드가 데이터를 저장하거나 메서드 결과를 반환할 때 생성되는 공간이다.
  • 크기는 시스템 설정과 독립적이다.

C 스택 (Native Method Stacks)

자바 외부에서 사용하는 메서드들이 저장되는 스택

PC 레지스터 (Program Counter Register)

자바의 내장 메서드들은 Program Counter를 가지고 있지 않지만, 구현한 메서드들은 할당한 변수에 맞는 PC(Program Counter)를 가지고 있고, 레지스터에는 그 주소나 포인터가 저장된다.

Garbage Collector 의 동작

  • JVM 이 자동으로 메모리의 할당, 할당 해제를 동작하게 해주는 과정이다.
  • 메모리 할당 해제가 진행되는 동안은 스레드에서 클라이언트의 요청을 받지 못한다.
    • Garbage Collector 튜닝 알고리즘으로 프로세스 진행시간을 단축시키거나
    • 객체에 age 필드를 삽입하여 분류하여 삭제할 수 있다
  • 현재는 JVM 에서 최적화 알고리즘을 통해 할당, 삭제하고 있다.

Resources

'Java' 카테고리의 다른 글

자바의 직렬화 (Serialization)  (0) 2024.02.22
자바의 Collection Framework  (1) 2024.02.20
자바의 HTTP 통신 라이브러리  (0) 2024.02.09
자바의 파일 입출력  (0) 2024.02.09
자바의 객체 지향 프로그래밍  (0) 2024.02.06