সকল জাভা প্রোগ্রাম জাভা ভার্চুয়াল মেশিন (JVM)-এ রান হয়। কম্পাইলেশনের পর, একটি জাভা ক্লাস প্ল্যাটফর্ম এবং মেশিন-ইনডিপেন্ডেন্ট বাইটকোড-এ রূপান্তরিত হয়, এবং কম্পাইল্ড ক্লাসগুলো .class ফাইল হিসেবে সংরক্ষিত হয়। যখনই আমরা এটি ব্যবহার করার চেষ্টা করি, ClassLoader সেই ক্লাসকে মেমরিতে লোড করে। ক্লাসগুলো নাম দিয়ে রেফারেন্স দেওয়া হলে জাভা এনভায়রনমেন্টে পরিচিত হয়। ক্লাস লোডিং ক্লাস লোডার করুন, একবার ক্লাস রান শুরু হলে, main() মেথড সেই ক্লাস শুরু করার পথ।
জাভা ৯-এ ক্লাস লোডারের কিছু মাইনর পরিবর্তন হয়েছে:
- সিস্টেম ক্লাস লোডার জাভা ৯-এ আর URLClassLoader-এর ইনস্ট্যান্স নয়, বরং এটি একটি ইন্টারন্যাল ক্লাস। এটি মডিউল-এ থাকা ক্লাসের জন্য ডিফল্ট লোডার।
- এক্সটেনশন ক্লাস লোডার-কে প্ল্যাটফর্ম ক্লাস লোডার হিসেবে রিনেম করা হয়েছে। জাভা SE প্ল্যাটফর্মের সব ক্লাস প্ল্যাটফর্ম ক্লাস লোডারের মাধ্যমে দৃশ্যমান, এবং জাভা কমিউনিটি প্রসেসের অধীনে মডিউলে থাকা ক্লাসগুলোও যা জাভা SE প্ল্যাটফর্মের অংশ নয়, সেগুলোও প্ল্যাটফর্ম ক্লাস লোডারের মাধ্যমে দৃশ্যমান।
- অ্যাপ্লিকেশন ক্লাস লোডারর ওপর নির্ভর করতে পারবে না যা ডিফাইন করে জাভা SE প্ল্যাটফর্মের কিছু ক্লাস প্ল্যাটফর্ম ক্লাস লোডার দ্বারা ডিফাইন করা হয়, অন্যদের বুটস্ট্র্যাপ ক্লাস লোডার দ্বারা।
- যদি এক্সিস্টিং কোড বুটস্ট্র্যাপ ক্লাস লোডারকে প্যারেন্ট ক্লাস লোডার হিসেবে ক্লাস লোডার তৈরি করে, তবে আমাদের প্ল্যাটফর্ম ক্লাস লোডারকে প্যারেন্ট হিসেবে ব্যবহার করতে পরিবর্তন করতে হবে।
- প্ল্যাটফর্ম ক্লাস লোডার URLClassLoader-এর ইনস্ট্যান্স নয়, বরং এটি একটি ইন্টারন্যাল ক্লাস।
- বুটস্ট্র্যাপ ক্লাস লোডার JVM-এর একটি বিল্ট-ইন ক্লাস লোডার। যাইহোক, এটি ক্রিটিক্যাল মডিউল যেমন base এর ক্লাস ডিফাইন করে। -Xbootclasspath/a দিয়ে ডিপ্লয় করা অ্যাপ্লিকেশন বা null কে প্যারেন্ট হিসেবে ক্লাস লোডার তৈরি করা আপডেটের দরকার হতে পারে।
উদাহরণ
public class ClassLoaderTest {
public static void main(String args[]) {
System.out.println("Class Loader Test");
ClassLoaderTest test = new ClassLoaderTest();
try {
test.showClassLoaders();
} catch(ClassNotFoundException cnfe) {
System.out.println(cnfe.getMessage());
}
}
public void showClassLoaders() throws ClassNotFoundException {
System.out.println("Classloader of this class: " + ClassLoaderTest.class.getClassLoader());
System.out.println("Classloader of Permission: " + java.sql.SQLPermission.class.getClassLoader());
System.out.println("Classloader of LinkedList: " + java.util.LinkedList.class.getClassLoader());
return;
}
}
আউটপুট
Class Loader Test Classloader of this class: jdk.internal.loader.ClassLoaders$AppClassLoader@504bae78 Classloader of Permission: jdk.internal.loader.ClassLoaders$PlatformClassLoader@299a06ac Classloader of LinkedList: null