Java의 우아한 방법으로 모든 기존 객체 포인터를 null으로 설정 하시겠습니까? 개체를 삭제하고 싶지만 여러 위치에 이벤트 수신기가 등록되어 있습니다.Java에서 모든 객체 포인터를 삭제하는 방법
답변
References을 살펴볼 수 있습니다. 참조를 사용하여 클래스를 참조하면 모든 일반 참조가 제거 될 때 오브젝트가 가비지 수집되지 않습니다. Reference
클래스가 보유한 참조는 수집기가 수집 할 개체를 결정할 때 계산되지 않습니다. 물론 청취자는 갑자기 사라지는 참조를 올바르게 처리해야합니다. 그리고 당신은 당신이 주위에 달라 붙는 것을 필요로하는 한 무엇인가가 일정한 참조를 유지하고 있는지 확인해야 할 것입니다.
이 스레드에서 약한 참조와 약한 참조의 차이점을 확인하십시오. What is the difference between a soft reference and a weak reference in Java?
Java의 경우 참조를 통해이를 수행 할 수 없습니다. 결정 성있는 Dispose
메서드를 만들어서 .NET의 IDisposable
과 같은 참조에서 값을 비울 수 있습니다.
명시 적으로, 아니요. 그리고 거기에는 좋은 이유가 있습니다. Java에서 가비지 콜렉션이 작동하는 방식이 아닙니다!
내가 실제로 생각할 수있는 최선의 접근 방법은 잠재적으로 WeakReferences에서 객체에 대한 모든 참조를 마무리하는 것입니다. , 주위에있는 사람들을 지나쳐서, 당신의 물건에 대한 강한 참고를 붙잡아 라. 이 강력한 참조를 null로 설정하면 해당 객체에 대한 모든 약한 참조가 가비지 수집 대상이됩니다.
물론 하드 참조가 null로 설정되면 WeakReference는 이후 언제든지 임의로 사라질 수 있다는 점을 알아야합니다. 따라서 코드를 사용하는 모든 코드가이를 처리 할 준비가되었는지 확인해야합니다.
그렇긴하지만 그 경로는 거의 다운되지 않는 것이 가장 좋으며, 유지 관리하기가 훨씬 더 어렵습니다. 범위를 벗어날 때 모두 릴리스된다는 것을 보장하는 것이 훨씬 더 나은 대안이 될 것이고 나머지 코드가 깔끔 해지면 어렵지 않을 것입니다.
우아한 방법은 없습니다. 그렇게하지 않거나 코드를 유지하기 어렵게 될 것입니다.
몇 가지 참고 사항 :
당신은 자바 객체 삭제를 제어 할 수 없습니다. 이것은 가비지 수집기의 일입니다. GC가 가비지 콜렉션을 수행하도록 지시 할 수 있지만, 이것이 오브젝트가 사실 삭제되는 것을 보장하지는 않습니다.
실제적으로 더 이상 도달 할 수없는 개체는 삭제됩니다. 모든 참조를 삭제하면 더 이상 접근 할 수 없습니다.
그 이유는 내가 모든 개체 참조를 삭제하는 방법을 요청했습니다. – Skip
글쎄 그럴 수 없어 - 기본적으로 내 대답이야. 필요한 경우 객체의 참조를 검색하는 래퍼 클래스를 만들 수 있지만이 래퍼를 사용하는 코드가 참조를 내부적으로 저장하지 않도록해야합니다. –
- 1. Java에서 새로운 포인터를 얻는 방법?
- 2. Java에서 파일을 안전하게 삭제하는 방법
- 3. 테이블의 모든 공간을 삭제하는 방법
- 4. 프린터에서 모든 작업을 삭제하는 방법
- 5. QGraphicsScene에서 모든 QGraphicsItem을 삭제하는 방법
- 6. java에서 windows가 사용/잠근 파일을 삭제하는 방법
- 7. 포인터를 한 번만 삭제하는 방법은 무엇입니까?
- 8. Java에서 객체 조각화
- 9. Java에서 객체 잠금
- 10. ManagedObjectContext에서 지정된 엔티티의 모든 객체를 삭제하는 방법
- 11. Kohana에서 모든 사용자 역할을 삭제하는 방법 3
- 12. sqlplus oracle의 테이블에서 모든 데이터를 삭제하는 방법
- 13. mysql5에서 데이터베이스의 모든 절차를 삭제하는 방법
- 14. 데이터 테이블에서 모든 행을 삭제하는 방법
- 15. /public/assets의 모든 항목을 삭제하는 방법
- 16. 브랜치와 참조 된 모든 객체를 삭제하는 방법
- 17. Java에서 매개 변수로 객체 배열을 전달하는 방법
- 18. Java에서 두 객체 병합
- 19. Java에서 객체 삭제
- 20. 벡터에 저장된 객체에 대한 포인터를 지우고 삭제하는 방법은 무엇입니까?
- 21. jni 및 Java에서 C++ new'ed 객체 사용
- 22. Java에서 포인터를 사용할 수없는 이유는 무엇입니까?
- 23. Java에서 간단한 데이터 세트를 저장/추가/삭제하는 가장 좋은 방법
- 24. void 포인터를 없애는 방법
- 25. Java에서 원시 객체 전달 및 편집
- 26. Java에서 양식 객체 크기 조정
- 27. 게시물에서 날짜를 삭제하는 방법
- 28. getutent() 포인터를 재설정하는 방법
- 29. j2me에서 포인터를 만드는 방법?
- 30. 데이터베이스에서 삭제하는 방법?
왜 이벤트 리스너를 삭제하지 않습니까? – emory
예, 가능한 한 가지 해결책은 객체가 삭제되었을 때 이지만 [WeakReferences] (http://download.oracle.com/javase/1,5.0/docs/api/java)를 사용하여 모든 EventListeners에서 모든 참조를 삭제하는 것입니다. Object가 null로 설정되었을 때 스스로 파괴 할 것이므로 – Skip