컴퓨터프로그래밍/JAVA

JAVA 가비지 컬렉션

zelkova 2013. 10. 6. 13:05

 <목차로 돌아가기>


가비지 컬랙션(Garbage Collection)

가비지 컬렉션은 가비지 컬렉터가 메모리의 힙 영역에 할당된 더 이상 사용되지 앟는 객체를 다른 객체가 사용할 수 있도록 제거하는 것을 말한다. 가비지 컬렉션을 자동 메모리 관리라 부르기도 한다.

가비지 컬렉션의 특징을 정리하면 다음과 같다.


가비지 컬렉션의 특징

1. 자동 메모리 관리 automatic memory management라 부르기도 한다.

2. 가비지 컬렉션은 프로그래머가 구현할 수 없다.

3. 가비지 컬렉션의 대상은 객체이지 참조가 아니다.

4. 가비지 컬렉션의 대상은 살아있는 스레드가 더이상 참조하지 않는 객체이다.

5. 다른 참조 변수도 참조하고 있는 객체는 가비지 컬렉션의 대상이 될 수 없다.

6.객체에 할당된 메모리를 명시적으로 해체할 수 없다.

7. 가비지 컬렉터가 객체를 어떠한 순서로 정리하는지는 알 수 없다.

8.가비지 컬렉터가 언제 수행될지 정확히 알 수 없다.

9.가비지 컬렉션의 실행은 JVM이 결정하며 우리는 단지 요청만 할 수 있다.



가비지 컬렉션 대상 만드는 방법

1. 참조변수에 null을 할당하기

참조 변수에 null을 할당하면 이 변수가 가리키고 있던 객체는 더이상 접근할 수 없다.

그래서 이객체는 가비지 컬렉션이 된다.

String a;

a = newString("aaa");

a = null;


2. 참조 변수에 다른 객체의 참조 값을 할당

참조 변수에 다른 객체의 참조 값을 할당하면 참조 변수가 가리키고 있던 객체를 더이상 접근할 수 없게 된다. 물론 이 변수가 가리키고 있던 객체를 다른 참조 변수가 가리키고 있지 않아야 한다.

String a = newString("aa");

String b = newString("bb");

a=b;


가비지 컬렉션 요청

어떤 객체가 가비지 컬렉션의 대상이 된다고 해서 가비지 컬렉터가 바로 이 객체의 메모리를 해지하는 것은 아니다. 가비지 컬렉션은 자바가상머신이 판단에 따라 동작하므로 사용자가 이를 강제할 수는 없ㄷ다. 다만 다음과 같은 방법으로 가비지 컬렉터에게 가비지 컬렉션을 요청할 수는 있다.


1. System.gc();

2. Runtime.getRuntime().gc();


소멸자 메소드

가비지 컬렉터는 어떤 객체를 가비지 컬렉션하기 전에 소멸자 메소드인 finalize 메소드를 호출한다. 그래서 이 메소드를 객체에서 사용한 자원을 해지하거나 마무리 메소드 용도로 사용하는 경우가 있다. 하지만 이 메소드는 언제 어떻게 호출될지를 알 수 없기 때문에 이러한 용도로 사용하는 것은 위험하다.

1. 객체가 제거되기 전에 특정 동작을 수행하기 위해 사용하는 메소드

2. 객체가 가비지 컬렉터에 의해 Heap메모리에서 제거될 때 딱 한 번 호출되는 메소드

3. 이 메소드가 언제 호출될지는 알 수 없음

4. 클래스에 finalize(0메소드를 추가 작성해야 함.


소멸자 메소드 사용방법

protected void finalize() throws Throwable


소멸자 메소드를 정의할 때는 반드시 상위 클래스의 finalize 메소드를 호출해야 한다.

class Test{

protectdvoidfinalize() throws Throwable{

super.finalize();


System.out.println("객체 소멸");

}

}





반응형

'컴퓨터프로그래밍 > JAVA' 카테고리의 다른 글

JAVA - java.lang 패키지  (0) 2013.10.08
JAVA - 중첩 클래스  (0) 2013.10.08
JAVA연산자  (0) 2013.10.05
JAVA - 기타 제한자.  (0) 2013.10.04
JAVA - 접근 제한자.  (0) 2013.09.30