ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210421_3(garbageCollecting)
    JAVA(Sol)(정리대기중..언젠가) 2021. 4. 21. 12:21

    garbage collecting

    의미 : 참조되지 않는 heap 영역의 메모리를 한가할때 JVM이자동으로 수거하는 기능

     

    자동으로 수거하도록 두는것이 가장 좋은 방법이다.

     

    ------code

    class 코드영역

    -------data

    static 상수영역 정적영역

    --------------------------------method area

    -------heap

    객체영역 gc대상영역:가끔수거

    -------stack

    메서드실행영역 자동수거

    (블럭이 끝나거나, return을 만나면), 바로수거됨

     

    강제 수거 명령

      수거하다

    System.gc();---> finalize() 자동 호출됨

    finalize() : callback method(가상머신이 호출하는메서드)

    -------------------------------------------------------------심화

    finalize 메서드는 Object 클래스에서 제공하는 기본 메서드이다. 그래서 어느 클래스에서든지 finalize 메서드를 오버라이드 할 수 있다. 가비지 컬렉터에 의해 객체가 회수 될때, finalize 메서드가 호출된다.

    문제점은 즉시 호출된다는 보장을 받을 수 없다.

     

    결론: 자동으로 수거하도로 냅두는 것이 가장 좋은 방법이다.

     

    package chapter12;
    
    public class GarbageTest {
    
    	public static void main(String[] args) {
    		Garbage[] ga = new Garbage[10]; // 객체 배열변수 //선언할떄 new한번
    
    		for (int i = 0; i < ga.length; i++) {
    			ga[i] = new Garbage(i); // 객체의 생성 0~9 // 생성할때 new한번
    		}
    
    		for (int i = 0; i < ga.length; i++) {
    			ga[i] = null; // 메모리 참조 삭제
    
    		}
    		System.gc();  //garbage collect 지금수거할래? super.finalize자동생성
    	}
    
    }
    
    class Garbage {
    	int objNo;
    
    	public Garbage(int n) {
    		objNo = n;
    		System.out.println("Garbage class" + objNo + "이만들어졌습니다.");
    	}
    
    	protected void finalize() throws Throwable {
    		System.out.println("Garbage class" + objNo + "에서 쓰이던 메모리가 수집되었습니다");
    		super.finalize(); // 콜백메소드 	System.gc(); 원래기능을 상실하여 재정의를 하는것
    	}
    }
    
    

     

Designed by Tistory.