약한 참고 문헌을 읽었습니다.
here에서 학습하는 코드를 사용하고 있습니다. 그것은 매우 간단합니다.언제 약한 참조가 제거되기 시작하는지 알아 내려고.
private void doFunction() throws InterruptedException {
Map<Integer, String> map = new HashMap<Integer, String>();
myMap = new WeakReference<Map<Integer, String>>(map);
map = null;
int i = 0;
while (true) {
if (myMap != null && myMap.get() != null) {
myMap.get().put(i++, "test" + i);
System.out.println("im still working!!!!");
}
else {
System.out.println("*******im free at:"+i+"*******");
Thread.sleep(5000);
if(myMap != null){
System.out.println("*******myMap is not null*******");
}
}
}
나는 작은 힙 크기 또는 –Xms and –Xmx
를 통해 어떤 크기를 요청할 수 있지만, 캐시 i == 15312
에서 제거 된 값을 볼 수 있었다하지 않았다.
따라서 15312
개체가 Map
에 있으면 GC에서 항목을 제거하기 시작합니다.
내 질문 : 15312
은 32 bit machine
과 4 GB
의 메모리가 너무 낮습니까? 참조가 제거되기 전에 나는 훨씬 더 높은 가치를 기대하고 있었다.
내가 잘못 생각하나요? 어떤 점에서 객체가 제거되기 시작하는지 평가할 수 있습니까?
당신은 추측 할 수 있습니다 ... 간단히 말하면, 그것은 약한 유령에 대해 알고있는 것이 좋지만, GC를 가지고 있다는 생각은 이런 것들에 대해 너무 많이 생각하지 않아야합니다. – hovanessyan