2013년 8월 28일 수요일

자바가비지 컬렉션(Garbage Collection) , [oraclejava커뮤니티에서 강좌, 오라클자바교육,오라클교육,자바교육잘합니다]

자바

오라클자바커뮤니티에서 설립한  개발자실무교육6년차 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클, SQL, 튜닝, 자바, 스프링, Ajax, jQuery, 안드로이드, 아이폰, 닷넷, C#, ASP.Net)  
www.onjprogramming.co.kr

가비지 컬렉션(Garbage Collection)

자바 플랫폼에서는 객체와 배열들은 모두 힙(heap)이라는 메모리 공간에 저장 됩니다. new 키워드를 사용할 때마다 힙의 메모리에 새로운 객체가 할당 되는 것입니다.

C++과는 달리 자바에서는 사용한 메모리를 반환하는 방법은 없습니다. 내부적으로 가비지 컬렉터가 이러한 일을 전담하고 있죠,,,

가비지 컬렉터는 낮은 우선 순위를 가지는 Backgroud Process로 동작하면서 어떤 객체의 메모리를 반환해야 하는 것인지를 계속 검사 합니다. 만약 반환 대상이 되는 사용되지 않는 객체를 찾았다면 소멸자(종료자)를 수행 하는 것과 같이 필요한 몇가지 작업을 하고 마지막으로 객체를 파괴하고 이 객체의 매모리를 힙에 반환 합니다.

프로그래머가 무엇을 하던지 메모리가 반드시 반환된다고 보장 할 수는 없지만 보통은 대상 객체에 null을 대입하고 System.gc() 메소드를 호출하는 방법을 주로 이용 합니다. 물론 System.gc()를 호출 했다고 가비지 컬렉션이 된다는 보장은 없지만 JVM이 한가하다면 가비지 컬렉션이 일어나면서 객체들은 소멸되고 메모리는 반환될 것입니다.

이러한 방법으로 메모리를 관리하면 편리하지만 개발자가 메모리를 직접 관리하지 못하므로 불편한 경우가 생길 수 있습니다. 이러한 문제점을 보완하기 위해 1.2이상에서는 java.lang.ref 패키지를 제공해서 프로그래머가 가비지 컬렉터에 접근할 수 있는 방법을 제공하고 있습니다.

이 패키지는 SoftReference, WeakReference, PhantomReference라는 세개의 클래스로 이루어 졌으며 이 클래스의 인스턴스는 객체에 대한 참조값을 보관하고 있습니다.

가비지 컬렉터는 이 참조값을 특별하게 다루는데 보통 참조가 가리키는 객체는 참조가 사라지기 전까지는 가비지 컬렉션 대상이 아니지만 위 클래스의 인스턴스들이 보관하는 참조는 특정 조건을 만족하면 자동으로 가비지컬렉션의 대상이 됩니다.

예를 들어 SoftReference 인스턴스가 보관하는 참조가 가리키는 객체는 시스템의 메모리가 부족한 경우엔 자동으로 가비지 컬렉션 대상이 됩니다. 즉 OutofMemoryError가 발생하기 전에 이 객체들은 모두 시스템에 반환될 것입니다.

이 객체들은 휴지통의 파일처럼 시스템이 필요하면 지울 수 있지만 지우기 전에는 언제나 다시 꺼내 쓸 수 있습니다.

댓글 없음:

댓글 쓰기