[Java] Garbage Collection

킹발·2022년 9월 28일
1

Java

목록 보기
6/12
post-thumbnail

Garbae Colection(GC) 이란?

JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제하는 프로세스

장점

  • C/C++ 에서는 GC가 없어서 개발자가 수동으로 메모리 해제를 해줘야하는데 Java는 JVM에 GC가 탑재되어 있어서 개발자 대신해서 메모리 관리를 해준다.
  • 개발자 입장에서는 메모리 관리, 메모리 누수 문제를 신경쓰지 않아도 되어서 Good

단점

  • 개발자는 메모리가 언제 해제되는지 정확하게 알 수 없다.
  • GC가 동작하는 동안 발생하는 지연

예시

stack 자료구조를 구현한 StackImpl 에서 clear() 함수는 기존에 할당 받은 메모리를 초기화 할 수 있지만, 기존 배열을 참조하지 않고 새롭게 배열을 만들어서 참조하게 되면 기존 배열(객체가 참조되고 있지 않은 상태)은 실시간으로 동작되는 GC에 걸러져서 자동으로 해제된다.

public class StackImpl implements Stack{
	//생략
    @Override
    public void clear() {
        if (isEmpty()) System.out.println("Stack is already empty!");
        else{
            top = -1;
            stackArr = new char[this.stackSize];
            System.out.println("Stack clear complete");
        }
    }

GC 동작방식

Heap 메모리 영역을 효율적으로 Garbage Collection을 하기 위해서 적당하게 Eden, Survival, Old Generation으로 구분하고 Mark And Sweep 알고리즘을 이용해서 GC 대상을 특정한다.

0개의 댓글