이번 3회 코테에서도 어김없이 3번 문제에는 cs가 나왔습니다. 그런데, 기존 3번 문제는 골드 5로 평가되었던데 비해, 3회 3번은 얘네들보다 난이도가 높았습니다. 가희와 쓰레기 놀이는 어떤 문제였는지, 출제 목적이 무엇이였는지부터 상세하게 설명을 하면서 풀이를 작성하도록 하겠습니다. 먼저, 이 문제를 가져오게 된 계기는 그리 어렵지는 않았습니다. 이 글에서도 간접적으로 볼 수 있긴 하지만, 결정적인 계기는 logback의 MDC를 보다가 threadLocal을 보게 되었고, 그 안에 있는 WeakReference를 보게 된 것이 결정타였습니다. gc가 약하게 도달 가능한 객체들을 모두 지워야 겠다는 판단을 했을 때, finalize가 된다고 되어 있는데 이것을 구현해 보라는 목적도 있었고요. 제한을 ..
가비지콜렉터 검색 결과
재미있는 프로그램을 몇 개 만들어 보겠습니다. 제가 정의한 MObj는 아래와 같습니다. 평범한 getter 메소드가 있습니다. 그리고 더 평범한 equals 메소드가 있습니다. 그리고 hashCode가 있는데요. 리턴값이 0부터 1999까지의 정수 중에서 Random하게 뽑은 값입니다. 딱 봐도 뭔가 이상하다는 것을 알 수 있습니다. 이 이상해 보이는 프로그램을 왜 예시로 들었는지는 천천히 설명해 보도록 하겠습니다. 저번에 가비지는, 도달 불가능한 객체라고 하였습니다. 이것은 gc가 알아서 회수를 할 겁니다. 문제는, 필요 없는 객체인데, 참조 (흔히, Strong reference)가 되는 경우가 있을 수 있습니다. 이 경우에, 그 객체는 gc의 수거 대상이 되지 않습니다. 예를 하나 들어보겠습니다. ..
Java에는 가비지 콜렉터가 있습니다. 이것이 어떻게 동작하는지는 추후에 쓸 기회가 있을 듯 싶습니다. 여기에 등장하는 용어들이 무엇인지에 대해서 간단하게 짚고 넘어가 보도록 하겠습니다. Reference 클래스는 사실, gc를 설명하기 위해 굉장히 중요한 키워드 중 하나이지만, 여기에서는 다루지 않겠습니다. 먼저 Reachability가 뭘까요? 도달이 가능하다는 것입니다. 그러면 Reachable Object는 도달 가능한 객체 정도로 해석하면 될 겁니다. 어디에서부터 도달 가능한 것일까요? Root로부터 도달 가능한 Obj들을 Reachable하다고 합니다. 이 Root에 대한 설명은 링크를 보시면 나와 있는데요. 1번째 문장에서, accessible from outside heap 이라는 문구가 ..
최근댓글