WeakReference 는
말 그대로 '약한' 참조이다.
어떤 객체에 대한 참조가 WeakReference 밖에 남아있지 않다면 그 객체는 GC의 대상이 된다.
SoftReference 는
WeakReference
보다는 약간 강한 참조이다. SoftReference 역시 어떤 객체에 대한 참조가 SoftReference 만 남아있다면
GC의 대상이 되지만 메모리의 남은 공간이 넉넉하다면 GC되지 않을 것이다. 하지만 메모리에 남은 공간이 얼마 없다면 똑같이
GC의 대상이 된다.
WeakReference 용어그대로 약한 레퍼런스이다. 메모리관리를 위해 고안된것으로 레퍼런스를
WeakReference로 하면 gc에 해당 레퍼런스가 관여되지 않는다.
private WeakReference<Launcher> mLauncher; // 변수선언
void setLauncher(Launcher launcher) {
mLauncher = new WeakReference<Launcher>(launcher); // 참조를 WeakReference로 저장함.
}
}
if (mLauncher != null) {
final Launcher launcher = mLauncher.get(); // 사용시에는 get을 호출하여 null을 반드시 체크하여 사용
if (launcher != null) {
launcher.loadWallpaper();
}
}
final Launcher launcher = mLauncher.get(); // 사용시에는 get을 호출하여 null을 반드시 체크하여 사용
if (launcher != null) {
launcher.loadWallpaper();
}
}
SoftReference
WeakReference 보다는 약간 강한 참조이다. Soft reference 만 남아있는 객체는 메모리의 요청에 의한 gc 의 대상이 된다. 메모리의 남은 공간이 넉넉하다면 gc되지 않을 것이며, 메모리의 남은 공간이 얼마 없거나 하다면 gc 의 대상이 될 것이다.
확실한건 vm 이 OutOfMemoryError 를 발생시키기 전에는 Soft reference 만 남아있는 객체가 gc의 대상이 된다는 점 정도고, 그 이외에는 vm 의 구현에 따라 다를 수 있다.
확실한건 vm 이 OutOfMemoryError 를 발생시키기 전에는 Soft reference 만 남아있는 객체가 gc의 대상이 된다는 점 정도고, 그 이외에는 vm 의 구현에 따라 다를 수 있다.
댓글 없음:
댓글 쓰기