닫고 자바 객체를 "파괴"하는 것이 올바른 방법입니다

Fagam32 :

나는지도를 가지고

public class MyMap implements Map<String,String>

그것은 DB에 몇 가지 물건을 수행하고 그것은 다음 중 하나를 수행해야 파괴하는 방법 :

  1. 가베지 수집없이에는 myMap를 파괴하는 경우 close()가 실행해야보다 clear()방법
  2. 객체 후 파괴되면 close()모든 데이터가 DB에 저장보다,

그것은 FileWriter처럼 작동합니다. 데이터 저장, 그렇게하지 않으면 - - 닫고 스트림이 경우에 당신은 잃을 :(

나는 무엇을 사용해야합니까? finalize()단순히 구현 Closeable또는 AutoCloseable뭔가 다른 또는?

Dnlst :

finalize()되는 자바 9부터 사용되지 않습니다 . 전화 할 경우 : VM이 종료 경우는 호출 할 수 없습니다 Runtime.runFinalizersOnExit(true)가 실행됩니다 (하지만 다른 문제가있다).

대신 당신은 구현해야합니다 AutoClosable.

이것은 자동을 닫을 수 Map로모그래퍼 try-with-resources.

당신은 또한 당신의 방법으로 구현 (도 ) 너무.close()FileWriterclose()FileWriterCloseableAutoCloseable

당신은, 당신은 대체 할 수 있습니다하려면 finalize()폐쇄가 제대로 작동하지만 성능 문제를 돌봐하고 내 소스 상태로 다음하지 않은 경우 백업으로 방법 :

  • 항상 전화  super.finalize() 당신의  finalize() 방법.
  • 시간 중요한 애플리케이션 로직을 넣지 마십시오  finalize()의 예측 불가능 성을보고.
  • 사용하지 마십시오  Runtime.runFinalizersOnExit(true); 가 위험에 시스템을 넣을 수있다.
  • 시스템과 스스로 캐치와 로그 예외를 무시합니다.

추천

출처http://10.200.1.11:23101/article/api/json?id=478472&siteId=1