I/O উন্নত

finalization-কে AutoCloseable দিয়ে প্রতিস্থাপন করুন এবং শুধু প্রতিরক্ষামূলক fallback হিসেবে Cleaner ব্যবহার করুন।

✕ Finalization
@Override
protected void finalize() throws Throwable {
    nativeHandle.release();
}
✓ Java 9+
final class NativeResource implements AutoCloseable {
    private static final Cleaner CLEANER = Cleaner.create();

    private static final class State implements Runnable {
        private final long handle;

        State(long handle) {
            this.handle = handle;
        }

        @Override
        public void run() {
            release(handle);
        }
    }

    private final Cleaner.Cleanable cleanable;

    NativeResource(long handle) {
        cleanable = CLEANER.register(this, new State(handle));
    }

    @Override
    public void close() {
        cleanable.clean();
    }
}
এই কোডে সমস্যা দেখছেন? আমাদের জানান।
⏱

নির্ধারিত

Try-with-resources একটি নির্দিষ্ট সময়ে resource release করে।

🛡

নিরাপদ lifecycle

finalizer resurrection এবং অনির্দেশ্য ordering এড়িয়ে যায়।

🧹

প্রতিরক্ষামূলক fallback

finalize() override না করেই Cleaner leak হওয়া resource পুনরুদ্ধার করতে পারে।

পুরনো পদ্ধতি
finalize() override করা
আধুনিক পদ্ধতি
AutoCloseable এবং Cleaner
JDK থেকে
9
কঠিনতা
উন্নত
Finalizer থেকে নির্ধারিত resource cleanup
উপলব্ধ

Cleaner এবং finalization deprecation JDK 9 (সেপ্টেম্বর 2017) থেকে উপলব্ধ

Finalization অপসারণের জন্য deprecated এবং এটি সময়মতো cleanup বা নির্ভরযোগ্য ordering—কোনোটিই দেয় না। AutoCloseable implement করুন, যাতে caller try-with-resources দিয়ে নির্ধারিতভাবে resource release করতে পারে। leak হওয়া resource-এর জন্য শেষ উপায় হিসেবে Cleaner একই idempotent cleanup action চালাতে পারে; এর action অবশ্যই registered object ধরে রাখবে না।