Java Virtual Machine (JVM) একটি গুরুত্বপূর্ণ উপাদান যা Java প্রোগ্রাম চালানোর জন্য প্রয়োজনীয় পরিবেশ প্রদান করে। JVM এর একটি গুরুত্বপূর্ণ দিক হল Class Loaders, যা Java classes লোড, যাচাই এবং ব্যবহারের জন্য দায়িত্বশীল। Class Loaders ক্লাসগুলিকে JVM এ লোড করার জন্য ব্যবহৃত হয়, এবং এটি একটি গুরুত্বপূর্ণ অংশ যা Java অ্যাপ্লিকেশনকে রান করার সময় বিভিন্ন ক্লাসের মধ্যে যোগাযোগ স্থাপন করে।
JVM-এ তিনটি প্রধান ধরনের Built-in Class Loaders রয়েছে:
- Bootstrap Class Loader
- Extension Class Loader
- Application Class Loader
প্রতিটি Class Loader এর নিজস্ব ভূমিকা এবং কার্যকারিতা রয়েছে, এবং এগুলি Java প্রোগ্রাম সঠিকভাবে রান করতে একসাথে কাজ করে।
1. Bootstrap Class Loader
Bootstrap Class Loader হলো JVM এর সবচেয়ে মূল এবং প্রথম ক্লাস লোডার, যা JVM এর হার্ডওয়্যার ভিত্তিক ক্লাসগুলিকে লোড করে। এটি JRE (Java Runtime Environment) এর ভিতরে থাকা core classes লোড করে, যেমন java.lang, java.util, java.io ইত্যাদি।
- Bootstrap Class Loader ক্লাসগুলির জন্য rt.jar (runtime classes) ফাইলটি ব্যবহার করে।
- এটি Java প্রোগ্রাম শুরু করার সময় প্রথমে কাজ শুরু করে এবং JVM দ্বারা পরিচালিত অত্যন্ত প্রাথমিক শ্রেণী গুলি লোড করে।
- Bootstrap Class Loader একটি native class loader, অর্থাৎ এটি Java এর মাধ্যমে নয়, বরং C/C++ কোডের মাধ্যমে ইমপ্লিমেন্ট করা হয়। এর ফলে এটি JVM এর জন্য প্রাথমিক ক্লাস লোড করতে সক্ষম হয়।
- এটি কোনো Java class লোড করতে সক্ষম হয় না, শুধুমাত্র JVM এর core classes (যেমন
java.lang.String,java.util.ArrayList) লোড করে।
Bootstrap Class Loader উদাহরণ:
System.out.println(String.class.getClassLoader()); // Output will be null, as String is loaded by Bootstrap ClassLoader
2. Extension Class Loader
Extension Class Loader হলো দ্বিতীয় স্তরের ক্লাস লোডার, যা JVM এর extension libraries লোড করতে ব্যবহৃত হয়। এটি Java Runtime Environment (JRE)-এর ext directory-এ থাকা ক্লাস ফাইলগুলি লোড করে, যেগুলি Java এর অধিকাংশ এক্সটেনশন ক্লাসে অন্তর্ভুক্ত থাকে।
- Extension Class Loader JVM-এর কিছু অতিরিক্ত লাইব্রেরি যেমন JDBC, cryptography লাইব্রেরি ইত্যাদি লোড করে।
- এটি jre/lib/ext ডিরেক্টরি বা Java extension ডিরেক্টরি থেকে ক্লাস লোড করে।
- এই ক্লাস লোডার সাধারণত Java libraries বা external JAR files লোড করতে ব্যবহৃত হয়।
Extension Class Loader উদাহরণ:
System.out.println(java.sql.Connection.class.getClassLoader()); // Output will be 'sun.misc.Launcher$AppClassLoader' or Extension ClassLoader
3. Application Class Loader
Application Class Loader হলো JVM এর তৃতীয় ক্লাস লোডার, যা Java অ্যাপ্লিকেশনের ক্লাস ফাইলগুলি লোড করতে ব্যবহৃত হয়। যখন Java প্রোগ্রাম রান করে, তখন এটি এই ক্লাস লোডার ব্যবহার করে অ্যাপ্লিকেশনের user-defined classes লোড করে।
- Application Class Loader সাধারণত class path থেকে Java ক্লাস লোড করে।
- এটি JVM-এর default class loader, এবং এটি Java ক্লাসগুলিকে classpath থেকে লোড করে।
classpathহলো এক্সিকিউটেবল ফাইলের পথ, যেখানে আপনার প্রোগ্রামের সমস্ত ক্লাস ফাইল (বা JAR ফাইল) রাখা থাকে।
Application Class Loader উদাহরণ:
System.out.println(Application.class.getClassLoader()); // Output will be the ClassLoader that loaded this class, usually AppClassLoader
Class Loaders এর মধ্যে পার্থক্য:
| Class Loader | Role/Responsibility | Example |
|---|---|---|
| Bootstrap Class Loader | JVM এর core libraries (যেমন java.lang, java.util) লোড করে। | rt.jar ফাইলের ক্লাসগুলো |
| Extension Class Loader | JVM এর extension libraries বা external JAR files লোড করে, যেমন JDBC, cryptography libraries। | jre/lib/ext ডিরেক্টরি থেকে লোড |
| Application Class Loader | ব্যবহারকারীর ডিফাইন করা Java ক্লাস লোড করে, যা সাধারণত classpath বা JAR files থেকে আসে। | classpath থেকে লোড হওয়া ক্লাস |
Class Loader Hierarchy:
JVM এ Class Loaders একটি hierarchical structure অনুসরণ করে, যেখানে ক্লাস লোডারগুলি একে অপরের মধ্যে সংযুক্ত থাকে। Bootstrap Class Loader সবসময় প্রথমে কাজ করে, তারপর Extension Class Loader এবং শেষে Application Class Loader। এই লোডারগুলির মধ্যে প্রতিটি নিজ নিজ কাজ করে, এবং তারা একসাথে কাজ করে ক্লাস লোড করার প্রক্রিয়া সম্পন্ন করে।
- Bootstrap Class Loader (প্রথম)
- Extension Class Loader (দ্বিতীয়)
- Application Class Loader (তৃতীয়)
Class Loaders এর মধ্যে প্রভাব বিস্তারকারী কোনো ক্লাস যদি Extension Class Loader বা Application Class Loader দ্বারা লোড হতে চায়, তবে এটি আগে Bootstrap Class Loader দ্বারা লোড হতে হবে।
Class Loader Delegation Model:
Class Loaders একটি delegation model ব্যবহার করে, যেখানে এক ক্লাস লোডার তার কাজের জন্য উপরের স্তরের ক্লাস লোডারের উপর নির্ভরশীল থাকে। উদাহরণস্বরূপ:
- Application Class Loader প্রথমে Extension Class Loader কে ডেলিগেট করবে, এবং তারপর Bootstrap Class Loader এর কাছে ক্লাস খুঁজতে যাবে।
- Extension Class Loader প্রথমে Bootstrap Class Loader কে ডেলিগেট করবে।
এই ডেলিগেশন প্রক্রিয়া নিশ্চিত করে যে একটি ক্লাস একাধিক লোডার দ্বারা লোড না হয় এবং এটি Java এর নিরাপত্তা এবং অখণ্ডতা বজায় রাখে।
সারাংশ:
JVM Class Loaders হল গুরুত্বপূর্ণ উপাদান যা Java প্রোগ্রাম চালানোর সময় প্রয়োজনীয় ক্লাসগুলি লোড করে। Bootstrap Class Loader, Extension Class Loader, এবং Application Class Loader এর মধ্যে প্রতিটি একটি নির্দিষ্ট কাজ করে, যা Java এর ক্লাস লোড করার সিস্টেমকে সুষ্ঠু এবং নিরাপদ রাখে। Class Loaders একে অপরের মধ্যে ডেলিগেশন মডেল ব্যবহার করে, যা প্রোগ্রামের কার্যকারিতা এবং নিরাপত্তা নিশ্চিত করে।
Read more