산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java 가비지 컬렉션 이해하기: 작동 원리와 중요성

Java 가비지 컬렉션이란?

Java의 가비지 컬렉터(GC)는 메모리를 자동으로 관리하여 개발자가 수동으로 메모리를 해제할 필요가 없게 해줍니다. 객체에 살아 있는 참조가 없으면 GC가 힙 공간을 회수하여, 그렇지 않으면 애플리케이션을 다운시킬 수 있는 메모리 누수를 방지합니다.

Java에서 객체는 new 연산자를 통해 힙에 생성됩니다. 런타임은 참조를 추적하며, 마지막 참조가 사라지면 객체는 수거 대상이 됩니다. GC는 백그라운드에서 주기적으로 실행되어 코드를 더 단순하고 안전하게 만듭니다.

C언어에서 free()가 필요한 것과 달리, Java는 댕글링 포인터와 미정의 동작의 위험을 제거하여 신뢰성과 보안을 강화합니다.

Java의 모든 객체는 메모리의 힙(heap) 영역에 존재하며, 이 영역을 GC가 스캔합니다.

실습 예제: GC 작동 관찰하기

1단계 – 아래 코드를 에디터에 복사:

class Student {
    int a;
    int b;
    public void setData(int c, int d) {
        a = c;
        b = d;
    }
    public void showData() {
        System.out.println("Value of a = " + a);
        System.out.println("Value of b = " + b);
    }
    public static void main(String[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
        s1.setData(1, 2);
        s2.setData(3, 4);
        s1.showData();
        s2.showData();
        // Student s3;
        // s3 = s2;
        // s3.showData();
        // s2 = null;
        // s3.showData();
        // s3 = null;
        // s3.showData();
    }
}

2단계 – 프로그램을 컴파일하고 실행. 처음에는 두 개의 Student 객체와 두 개의 참조 변수가 생성됩니다. 아래 다이어그램을 참조하세요.

Java 가비지 컬렉션 이해하기: 작동 원리와 중요성

3단계 – 20~22번 줄의 주석을 해제하고 다시 실행. 이제 s3가 s2와 같은 객체를 가리킵니다. 다이어그램은 두 참조가 하나의 객체를 공유함을 보여줍니다.

Java 가비지 컬렉션 이해하기: 작동 원리와 중요성

4단계 – 23~24번 줄 주석 해제. s2를 null로 설정하면 s3만 유일한 참조로 남아 객체는 여전히 살아 있습니다.

Java 가비지 컬렉션 이해하기: 작동 원리와 중요성

5단계 – 25~26번 줄 주석 해제. s2와 s3 모두 null이 되면 객체는 GC 대상이 됩니다. 마지막 다이어그램이 이 상태를 보여줍니다.

Java 가비지 컬렉션 이해하기: 작동 원리와 중요성

객체를 수거 대상으로 만들기

  1. 참조 변수에 null을 할당. GC가 실행되면 메모리를 회수합니다.
  2. 기본 타입(int, double 등)은 객체가 아니며 null이 될 수 없습니다.

Java 가비지 컬렉션 이해하기: 작동 원리와 중요성

참고: 명시적 파이널라이저는 권장하지 않으며, GC에 맡기는 것이 좋습니다.

java

  1. Java 연산자 마스터하기: 종류, 문법, 실전 예제
  2. Java 인터페이스 마스터: 개념, 구현, 모범 사례
  3. Java Try-with-Resources 마스터: 자동 리소스 관리 완전 해설
  4. Java 애너테이션 완전 해설: 종류, 배치 위치, 실전 예제
  5. Java static 완벽 해설: 변수, 메서드, 블록과 실전 예제
  6. Java 인터페이스 vs 추상 클래스: 올바른 추상화 선택 가이드
  7. Java 생성자 오버로딩: 실전 코드 예제로 이해하기
  8. 자바 컬렉션 마스터하기: 효율적 자료구조 종합 가이드
  9. Java 10: 유연하고 효율적인 메모리 관리를 위한 가비지 컬렉터 인터페이스 도입
  10. Java 10 개선: -XX:AllocateHeapAt으로 NV-DIMM에 힙 할당