2011-12-20 1 views
0

Java 언어의 finalize()와 비슷한 오브젝트에 비헤이비어를 구현하고자합니다. 일부 문이 실행되기를 원합니다 가비지 수집 바로 전에이 발생합니다. finally 블록은 try 블록 이후에 마침내 실행되므로 여기서는 유용하지 않습니다. 이는 필자의 요구 사항이 아닙니다. 기본적으로 JVM의 힙에서 언로드되기 직전에 객체를 직렬화하려고합니다. 제발 조언.오브젝트의 보증 된 finalize 작동을 구현하는 방법

+2

close() 메소드를 구현하십시오. 토론 here http://stackoverflow.com/questions/158174/why-would-you-ever-implement-finalize –

+0

그래, 내가 알기로는 close()가 길 아래로 할 수있는 최신 킥이다. –

답변

1

은 JVM이 호출이 보장되지 않기 때문에 어떤 상관없이 실행되지 않을 것입니다 finalize() 메소드를 구현하는 방법은 없습니다. 예를 들어, 프로그램이 종료 될 때 힙에 남아있는 객체는 현재 JVM에 따라 finalize() 메서드가 호출되지 않을 수 있습니다.

일반적으로 finalize()을 사용하여 메모리를 제외한 모든 리소스를 해제하는 것이 좋습니다. 리소스를 해제하는 것보다 훨씬 적은 작업을 수행하는 것이 좋습니다. 객체를 직렬화하려면 다른 시점을 선택하십시오.

finalizers에 대해 알아야 할 거의 모든 내용을 요약 한 good article이 있습니다.

0

필자는 팬텀 레퍼런스 (나쁜 스타 워즈 영화 중 한 명처럼 들린다)를 사용한 적이 없지만 트릭을 할 수있는 것처럼 들립니다.

"콜렉터가 해당 지시 대상을 다시 회수 할 수 있다고 판단한 후 큐에 대기하는 팬텀 참조 오브젝트 팬텀 참조는 Java finalization에서 가능한 것보다 더 유연한 방식으로 사전 상속 정리 작업을 예약하는 데 가장 자주 사용됩니다 메커니즘 "

+0

큰 제안은 내 문제를 해결했습니다. Phantom 참고 자료 [http://www.pawlan.com/monica/articles/refobjs/] – sij

+0

에 대한 최고의 기사 중 하나입니다. 참고 주셔서 감사합니다. – user949300

관련 문제