코딩하는 공무원

Actor 객체의 메모리 해제 시점 본문

컴퓨터교육

Actor 객체의 메모리 해제 시점

코딩펀 2012. 9. 25. 20:27

객체에 대한 참조가 있거나 월드 상에 존재하면(보이지는 않더라도 월드 상에 있다면) 어째든 메모리에 상존합니다.
참조가 없고 ‘그리고’ Actor 객체가 removeObject() 메서드에 의해서 월드 상에서 없어져야 가비지 컬렉팅의 대상이 됩니다.

객체에 대한 참조가 있는 한 removeObject() 메서드가 호출되었다고 해서 메모리 해제가 되는 것은 아니므로 주의해야 합니다. 따라서, 많은 객체들을 생성한 후 removeObject() 메서드를 호출하면 눈에는 보이지 않는 객체들이 메모리에는 그대로 남아 있다는 것이지요..  참조가 있는 한 이러한 객체들은 메모리 상에 존재하므로 언제든지 addObject() 메서드를 통해서 월드 상에 다시 보이게 할 수 있습니다.( 이때 새로운 위치 값을 설정해야 합니다. 왜냐하면 월드 상에서 사라졌을 당시의 위치값은 잃어버리기 때문입니다.)

이러한 객체들이 많을 경우 out of memory 메시지가 나타나지 쉽상이지요... 또는 Greenfoot 이 매우 느려지기도 합니다.

메모리 부족 오류를 없애기 위해서는 removeObject() 메서드를 호출한 후 해당 객체의 참조가 있을 경우 참조변수를 null로 만들어야 합니다.

이렇게 참조가 없어진 객체는 JVM에 의해 ‘쓰레기’로 판단하여 자동 해제됩니다. 다만, 쓰레기 수집은 JVM이 필요하다고 판단할 때 실행됩니다. System.gc()를 호출하여 JVM에게 쓰레기 수집을 더 빨리 수행하도록 요청할 수는 있지만, 이것 또한 JVM 마음이지요... 즉, Java 언어에서 쓰레기 수집은 ‘비결정적’입니다.

기억해 둘 점!!!

객체가 메모리에서 해제되기를 원한다면 removeObject() 메서드를 호출한 후 참조를 null로 설정하세요!

Comments