반응형


가비지 콜렉션 S/W H/W

2010/05/26 08:42

복사http://skichase.blog.me/70086734516

가비지(Garbage)

프로그램에서 더이상 사용하지 않는 메모리 영역

가비지 콜렉션 (Garbage Collection)

프로그램에서 더이상 사용하지 않는 메모리 영역을 정리해서 프로그램의 다른부분에서 사용할 수 있게 하는 작업. 자바에서는 JVM이 가비지 콜렉션 작업을 자동으로 해준다.

Mark-Sweep 방식

일반적인 JVM이 가비지 콜렉션하는 방식으로, 객체에 메모리를 조사하여 객체를 참조하는 핸들이 있는 경우에는 체크하고, 객체 참조 핸들이 없는 경우에는 체크를 해제해서, 체크가 해제된 객체들을 정리하는 방식

가비지 콜렉션 작업은 우선순위가 낮은 쓰레드로 처리하여, 일반적으로 다른 스레드가 모두 수행된 후 가비지 콜렉션 작업이 수행된다.

메모리에 여유가 공간이 없어진 경우나, 프로그램에서 가비지 콜렉션작업을 강제로 수행하라고 지시하는 경우는 다른 스레드와 같이 수행된다.

프로그램에서 가비지 콜렉션작업을 강제로 수행하라고 지시하는 것은 작업 요청하는 것이, 가비지 콜렉션작업을 보장하는 것은 아니다.
예)
System.gc();
또는
Runtime.getRuntime().gc();

파일 닫기나 데이터베이스 닫기 같은 가베지 콜렉션이 일어날 때 같이 수행할 코드가 필요한 경우는 Object클래스에 finalize()를 오버라이딩해서 쓴다.

protected void finalize() throws Throwable

가비지 콜렉션 예제

public class Garbage

{

public static void main(String[] args)

{

int a = 120;
int b;
String c = "Traffic120";
String d = "JAVA GOOD";

b = a;
c = c + d;
d = c + d;
c = null;
// c는 가비지 콜렉션 대상이 된다.
// 가비지 콜렉션 작업이 어느 시점에서 이루어 지는지 보장할 수 없다.

System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}

실행결과
120
120
null
Traffic120JAVA GOODJAVA GOOD

반응형

+ Recent posts