finalize() মেথড এর ভূমিকা কী?

Java Memory Management এবং Garbage Collection - জাভা ইন্টারভিউ প্রশ্ন (Java Interview Questions) - Java Technologies

381

finalize() মেথড জাভাতে একটি বিশেষ পদ্ধতি যা Object ক্লাসে ডিফাইন করা হয়েছে এবং এটি একটি অবজেক্ট গার্বেজ কালেকশনের (Garbage Collection) আগে কল করা হয়। finalize() মেথডের মূল ভূমিকা হলো অবজেক্টটি গার্বেজ কালেকশন দ্বারা মুছে ফেলার আগে কোনো ফাইনাল কleanup (clean-up) কাজ সম্পাদন করা, যেমন খোলা ফাইল বা ডাটাবেস সংযোগ বন্ধ করা, মেমরি রিসোর্স রিলিজ করা ইত্যাদি।

finalize() মেথডের ভূমিকা:

  • finalize() মেথড অবজেক্টের জীবনের শেষ পর্যায়ে কল করা হয়, যখন Garbage Collector অবজেক্টটি আর ব্যবহারযোগ্য নয় এমন চিনে ফেলবে। তখন, এটি ওই অবজেক্টের জন্য finalize() মেথড কল করতে পারে, যেখানে আপনি অবজেক্টটি মুছে ফেলার আগে কিছু পরিষ্কার বা রিসোর্স মুক্ত করার কাজ করতে পারেন।
  • Garbage Collection Java এর একটি প্রক্রিয়া যার মাধ্যমে অপ্রয়োজনীয় অবজেক্টগুলো মুছে ফেলা হয় এবং মেমরি পুনরুদ্ধার করা হয়।

finalize() মেথডের ব্যবহার:

  1. অবজেক্টের রিসোর্স মুক্ত করা:
    • যদি একটি অবজেক্ট কোনো মেমরি বা সিস্টেম রিসোর্স (যেমন ফাইল, ডাটাবেস সংযোগ) ব্যবহার করে, তবে সেই রিসোর্স গুলি finalize() মেথডে রিলিজ (release) করা যায়, যাতে গার্বেজ কালেকশন পরে সেগুলি রিসোর্স লিক না হয়।
  2. কাস্টম ক্লিন-আপ অপারেশন:
    • finalize() মেথডে আপনি অন্যান্য ক্লিন-আপ অপারেশন যেমন লগ ফাইল সংরক্ষণ, নেটওয়ার্ক কানেকশন বন্ধ, বা অন্যান্য ধরণের টেম্পোরারি ডেটা পরিষ্কার করতে পারেন।

finalize() মেথডের কাজের উদাহরণ:

class Resource {
    public void open() {
        System.out.println("Resource is opened");
    }

    public void close() {
        System.out.println("Resource is closed");
    }

    // Overriding finalize method to release resources before object is destroyed
    @Override
    protected void finalize() throws Throwable {
        try {
            // Clean-up code (release resources, close connections, etc.)
            System.out.println("finalize() method is called. Cleaning up resources...");
            close();
        } finally {
            // Always call the superclass's finalize method
            super.finalize();
        }
    }
}

public class FinalizeExample {
    public static void main(String[] args) {
        Resource res = new Resource();
        res.open();

        // Dereferencing object to make it eligible for garbage collection
        res = null;

        // Requesting JVM to run Garbage Collector
        System.gc(); // Invoking garbage collection manually (not recommended in real-world scenarios)
    }
}

Output:

Resource is opened
finalize() method is called. Cleaning up resources...
Resource is closed

কিছু গুরুত্বপূর্ণ বিষয়:

  1. Garbage Collector এর উপর নির্ভরশীলতা:
    • finalize() মেথডের কল করা Garbage Collector-এর উপর নির্ভরশীল, এবং এটি কখন কল হবে তা নির্ধারণ করা যায় না। এটি যখন অবজেক্টটি গার্বেজ কালেকশন দ্বারা মুছে ফেলার জন্য নির্বাচন করে তখনই কল হবে।
    • আপনি System.gc() ব্যবহার করে গার্বেজ কালেকশন চালু করতে পারেন, তবে এটি জাভা গার্বেজ কালেক্টরের কার্যকলাপ নিয়ন্ত্রণ করতে পারে না। এটি শুধুমাত্র গার্বেজ কালেক্টরকে সিগন্যাল দেয় যে, এটি কাজ করতে পারে, তবে সেটা করা বাধ্যতামূলক নয়।
  2. অপর্যাপ্ত সমাধান:
    • finalize() মেথড ব্যবহার করা গার্বেজ কালেকশনের সঠিক পদ্ধতি নয়। এটি একটি অপ্টিমাল সমাধান নয়, কারণ আপনি কখন গার্বেজ কালেকশন শুরু হবে তা জানেন না।
    • try-with-resources বা close() মেথডের মাধ্যমে সঠিকভাবে রিসোর্স রিলিজ করা উচিত, যেখানে রিসোর্স ব্যবস্থাপনা স্বয়ংক্রিয়ভাবে করা হয়।
  3. finalize() মেথডের ব্যবহার পরিহার করা:
    • Java 9 থেকে finalize() মেথড ব্যবহারের ক্ষেত্রে কিছু নতুন আপডেট আসছে। Java 9-এ, finalize() মেথড ব্যবহারের পরিবর্তে try-with-resources এবং AutoCloseable ইন্টারফেস ব্যবহারের পরামর্শ দেওয়া হয়েছে।
    • java.lang.ref.Cleaner ক্লাসও একটি নতুন উপায় হিসেবে এসেছে, যা finalize() মেথডের পরিবর্তে উন্নত পরিষ্কারক অপারেশন সরবরাহ করে।

finalize() মেথড ব্যবহার না করার পরামর্শ:

জাভা 9 এবং পরবর্তী সংস্করণগুলোতে finalize() মেথডকে পুরনো প্রযুক্তি হিসেবে বিবেচনা করা হচ্ছে। এর বিকল্প হিসেবে try-with-resources, AutoCloseable, এবং Cleaner ইন্টারফেস ব্যবহার করার পরামর্শ দেওয়া হয়।

সারাংশ:

  • finalize() মেথড একটি অবজেক্টের জীবনের শেষ পর্যায়ে রিসোর্স রিলিজ করার জন্য ব্যবহৃত হয়, যাতে মেমরি বা অন্য কোনো সিস্টেম রিসোর্স লিক না হয়।
  • এটি গার্বেজ কালেকশনের আগে স্বয়ংক্রিয়ভাবে কল করা হয়, তবে finalize() মেথডের কার্যকারিতা সম্পূর্ণরূপে গার্বেজ কালেক্টরের ওপর নির্ভরশীল।
  • finalize() মেথডের ব্যবহার পরিহার করে বর্তমানে আরও উন্নত পদ্ধতিগুলির দিকে এগিয়ে যাওয়ার পরামর্শ দেওয়া হয়, যেমন try-with-resources এবং AutoCloseable ইন্টারফেস।
Content added By
Promotion

Are you sure to start over?

Loading...