Giả sử tôi đã tạo một lớp tài nguyên với phương thức close() để làm sạch tài nguyên và tôi muốn ghi đè xong() để giải phóng tài nguyên (và in một cảnh báo) nếu ai đó đã quên gọi close(). Làm thế nào điều này có thể được thực hiện đúng cách?Làm thế nào để thực hiện đúng một trình hoàn thiện để phát hiện rò rỉ tài nguyên trong Java
- Chỉ được đề xuất cho tài nguyên gốc (được phân bổ bởi JNI)?
- Điều gì sẽ xảy ra nếu bạn sử dụng tham chiếu đến một đối tượng khác đã được hoàn thành, từ trình kết thúc? Nếu có các phụ thuộc tuần hoàn, tôi không thấy cách trình thu gom rác có thể ngăn cản bạn truy cập vào các đối tượng mà các trình finalizers có thể đã được thực thi.
- Có cách nào khác thay thế tốt hơn để ghi đè xong() để phát hiện và/hoặc xử lý rò rỉ tài nguyên không?
- Bất kỳ cạm bẫy nào khác cần lưu ý khi triển khai trình kết thúc?
Lưu ý: Tôi biết rằng việc sử dụng finalize() thường là ý tưởng tồi và không đảm bảo được gọi, có một số câu hỏi khác thảo luận về điều này. Câu hỏi này đặc biệt về cách để triển khai trình kết xuất bằng Java, không phải về số lý do tại sao bạn nên (hoặc không nên).
Tôi hy vọng câu trả lời của tôi sẽ hữu ích. Hãy cho tôi biết nếu tôi bỏ lỡ bất cứ điều gì. –
Rephrased điểm thứ hai về việc truy cập các đối tượng có thể hoàn thành từ finalizer. Vẫn còn tò mò về những gì sẽ là tác động của điều đó. – Soulman