728x90
참조란?
참조란 객체나 변수가 메모리를 생성하지 않고 기존에 존재하는 메모리에 접근하는 것이다.
참조의 종류
강한 참조(String Reference)
Object o = new Object();
강한 참조를 통해 참조되고 있는 객체는 가비지 컬렉션의 대상에서 제외된다.
- new로 생성된 객체, 네이티브 피어, Queue / Stack처럼 스스로 메모리를 관리하는 객체 등...
GC의 대상이 되도록 한다.
o = null;
소프트 참조(Weak Reference)
MyClass ref = new MyClass();
SoftReference<MyClass> softRef = new SoftReference<MyClass>(ref);
JVM의 메모리가 부족한 경우에만 힙영역에서 제거되고 메모리가 부족하지 않다면 굳이 제거하지 않습니다.
- 대상 객체를 참조하는 경우가 SoftReference 객체만 존재하는 경우, Heap영역 메모리가 부족한 경우 등...
// 이 시점에 GC의 실행 대상이 가능
ref = null;
// JVM의 메모리가 부족하지 않아 GC 실행 대상이 되지 않은 경우
// null이 반환되지 않고 기존 객체가 반환됨
ref = softRef.get()
약한 참조(Weak Reference)
MyClass ref = new MyClass();
WeakReference<MyClass> weakRef = new WeakReference<MyClass>(ref);
시점이 GC의 실행 주기와 일치하며 이를 이용하여 짧은 주기에 자주 사용되는 객체를 캐시할 때 유용하다.
// 이 시점에 GC의 실행 대상이 가능
ref = null;
// 다음 GC 실행시 무조건 힙 메모리에서 제거
// 제거된 경우 null 반환
ref = softRef.get();
[참고]
728x90
댓글