티스토리 뷰

공부

[Java] Strong Reference vs Weak Reference

승가비 2021. 12. 27. 23:04
728x90
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.LinkedList;
import java.util.List;

public class Main {
	private static class BigData {
		private int[] array = new int[2500]; //10000byte, 10K
	}

	private static class ReferenceTest {
		private List<WeakReference<BigData>> weakRefs = new LinkedList<>();
		private List<SoftReference<BigData>> softRefs = new LinkedList<>();
		private List<BigData> strongRefs = new LinkedList<>();

		public void weakReferenceTest() {
			try {
				for (int i = 0; true; i++) {
					weakRefs.add(new WeakReference<>(new BigData()));
				}
			} catch (OutOfMemoryError ofm) { // weak일 경우 out of memory 발생 하지 않는다.
				System.out.println("out of memory!");
			}
		}

		public void softReferenceTest() {
			try {
				for (int i = 0; true; i++) {
					softRefs.add(new SoftReference<>(new BigData()));
				}
			} catch (OutOfMemoryError ofm) { // weak일 경우 out of memory 발생 하지 않는다.
				System.out.println("out of memory!");
			}
		}

		public void strongReferenceTest() {
			try {
				for (int i = 0; true; i++) {
					strongRefs.add(new BigData());
				}
			} catch (OutOfMemoryError ofm) { // Strong일 경우 out of memory 발생
				System.out.println("out of memory!");
			}
		}
	}

	public static void main(String[] args) {
		System.out.println("실행");

		ReferenceTest test = new ReferenceTest();
		// test.weakReferenceTest();
		test.softReferenceTest();
		// test.strongReferenceTest();

		System.out.println("종료");
	}
}

https://ktko.tistory.com/entry/%EC%9E%90%EB%B0%94-%EA%B0%95%ED%95%9C%EC%B0%B8%EC%A1%B0Strong-Reference%EC%99%80-%EC%95%BD%ED%95%9C%EC%B0%B8%EC%A1%B0Weak-Reference

 

자바 강한참조(Strong Reference)와 약한참조(Weak Reference)

강한 참조(Strong Reference) 일반적으로 new를 통해서 객체를 생성하게 되면 생기게 되는 참조. 강한 참조를 통해 참조되고 있는 객체는 가비지 컬렉션의 대상에서 제외된다. Soft Reference 강한 참조와

ktko.tistory.com

 

728x90

'공부' 카테고리의 다른 글

[Architecture] Circuit Breaker (Netflix/Hystrix)  (0) 2021.12.27
[Java] stream lambda max & min  (0) 2021.12.27
[MySQL] IFNULL(field, 'default')  (0) 2021.12.27
[Java] HashMap vs HashTable  (0) 2021.12.27
[Spark] install  (0) 2021.12.27
댓글