انواع کلاس لودر در جاوا

Summarize this content to 400 words in Persian Lang
در جاوا، سه نوع اصلی بارگذار کلاس وجود دارد:
Bootstrap Class Loader • تابع: کتابخانه های اصلی جاوا واقع در دایرکتوری /lib (به عنوان مثال rt.jar، resources.jar) را بارگیری می کند. • پیاده سازی شده در: کد بومی (معمولاً C یا C++). • Role: والد تمام بارگذارهای کلاس است و خود والد ندارد. این مسئول بارگذاری کلاس های اساسی مورد نیاز JVM است.
برنامه افزودنی (یا پلتفرم) کلاس Loader • تابع: کلاس ها را از فهرست های برنامه افزودنی بارگیری می کند (/lib/ext یا هر دایرکتوری دیگری که توسط ویژگی سیستم java.ext.dirs مشخص شده است). • نقش: قابلیت ارائه شده توسط کتابخانه های اصلی جاوا را گسترش می دهد.
Application (یا System) Class Loader • Function: کلاس ها را از مسیر class، که شامل دایرکتوری ها و فایل های JAR مشخص شده توسط متغیر محیطی CLASSPATH یا گزینه خط فرمان -cp است، بارگیری می کند. • Role: بارگذار کلاس پیشفرض است که توسط JVM برای بارگیری کلاسهای سطح برنامه استفاده میشود.
/lib• مکان: این دایرکتوری داخل نصب JDK (کیت توسعه جاوا) شما است. قسمت نشان دهنده دایرکتوری ریشه ای است که JDK شما در آن نصب شده است. به عنوان مثال، اگر JDK شما در C:\Program Files\Java\jdk-14 نصب شده باشد، lib / C:\Program Files\Java\jdk-14\lib خواهد بود.• Contents: این فهرست شامل کتابخانه های ضروری و منابع مورد نیاز زمان اجرا جاوا است. این شامل کلاس های اصلی جاوا است، مانند کلاس های موجود در rt.jar که کتابخانه زمان اجرا است.• Role: کلاس های این دایرکتوری توسط Bootstrap Class Loader بارگذاری می شوند که بارکننده کلاس والد در سلسله مراتب بارگذاری کلاس است. اینها کلاس های اساسی هستند که توسط JVM برای اجرای برنامه های جاوا مورد نیاز است./lib/ext• مکان: این یک زیر شاخه در دایرکتوری lib نصب JDK شما است. برای مثال، اگر JDK شما در C:\Program Files\Java\jdk-14 نصب شده باشد، /lib/ext C:\Program Files\Java\jdk-14\lib\ext خواهد بود.• محتوا: این دایرکتوری برای برنامه های افزودنی به پلت فرم اصلی جاوا در نظر گرفته شده است. میتوانید فایلهای JAR را در اینجا قرار دهید که کلاسهای استاندارد جاوا را گسترش میدهند.• نقش: کلاس ها و کتابخانه های این فهرست توسط Extension Class Loader بارگذاری می شوند. کتابخانههای اضافی را بارگیری میکند که بخشی از زمان اجرا اصلی جاوا نیستند، اما همچنان بخشی از پلتفرم استاندارد جاوا هستند.
شما معمولاً نیازی به تعامل مستقیم با کلاس لودرها ندارید. با این حال، درک نحوه کار آنها برای اشکال زدایی یا بهینه سازی برنامه های کاربردی پیچیده مفید است.در اینجا خلاصه ای سریع از زمانی که ممکن است نیاز باشد با کلاس بارگذار در کد جاوا خود سر و کار داشته باشید، آمده است:لودرهای کلاس سفارشیاگر بخواهید کلاس ها را به روشی متفاوت از رفتار پیش فرض بارگیری کنید، ممکن است یک بارکننده کلاس سفارشی ایجاد کنید. برای مثال، ممکن است لازم باشد:• بارگذاری کلاس ها از یک مکان غیر استاندارد.• پیاده سازی یک سیستم پلاگین که در آن کلاس ها به صورت پویا بارگذاری می شوند.
موارد استفاده رایج برای لودرهای کلاس سفارشی• بارگذاری پویا: بارگیری کلاس ها از شبکه، پایگاه داده یا در طول زمان اجرا از مکان های ارائه شده توسط کاربر.• جداسازی: اجرای چندین نسخه از یک کتابخانه در یک برنامه.• پلاگین ها: پیاده سازی یک معماری پلاگین که در آن پلاگین ها می توانند در زمان اجرا بدون راه اندازی مجدد برنامه بارگذاری یا تخلیه شوند.
نکات کاربردی• Use Case Specific: اکثر برنامه ها نیازی به بارگذار کلاس سفارشی ندارند. آنها معمولاً در سناریوهای پیشرفته استفاده می شوند.• درک سلسله مراتب Class Loader: قبل از پیاده سازی کلاس loader های سفارشی، مطمئن شوید که رابطه والد-فرزند در کلاس loader را درک کرده اید.
لودرهای کلاس
Bootstrap Class Loader o Function: کتابخانه های اصلی جاوا را از /lib بارگیری می کند. o مثال: کلاس هایی مانند java.lang.String، java.util.ArrayList را بارگیری می کند. o جزئیات: در کد بومی پیاده سازی شده و والد ندارد.
Extension (یا Platform) Class Loader o Function: کلاس ها را از /lib/ext یا سایر دایرکتوری های مشخص شده توسط ویژگی سیستم java.ext.dirs بارگیری می کند. o مثال: کتابخانه های اضافی مانند javax.crypto.Cipher را بارگیری می کند. o جزئیات: Child of the Bootstrap Class Loader.
Application (یا System) Class Loader o Function: کلاس ها را از مسیر class، شامل دایرکتوری ها و فایل های JAR مشخص شده توسط متغیر محیطی CLASSPATH یا گزینه خط فرمان -cp بارگیری می کند. o مثال: کلاس های برنامه شما را بارگذاری می کند. o جزئیات: Child of Extension Class Loader.
نکات کلیدی• Bootstrap Class Loader: کلاس های اصلی جاوا را برای JVM بارگیری می کند.• Extension Class Loader: کتابخانه های برنامه افزودنی را از /lib/ext بارگیری می کند.• Application Class Loader: کلاس های خاص برنامه را از مسیر کلاس بارگیری می کند.
کلاس های Core Java به کلاس های اساسی اشاره می کنند که برای عملکرد اساسی زبان برنامه نویسی جاوا و محیط زمان اجرا ضروری هستند. این کلاس ها بخشی از کتابخانه استاندارد جاوا هستند و در کیت توسعه جاوا (JDK) گنجانده شده اند. آنها توسط Bootstrap Class Loader بارگذاری می شوند و در پوشه /lib قرار دارند.دسته بندی های کلیدی کلاس های اصلی جاوا
بسته Java.lang: o شامل کلاس های اساسی است که برای زبان برنامه نویسی جاوا ضروری هستند. o مثالها: رشته، شیء، ریاضی، سیستم، موضوع.
بسته Java.util: o شامل چارچوب مجموعه ها، کلاس های مجموعه قدیمی، مدل رویداد، امکانات تاریخ و زمان، بین المللی سازی، و کلاس های کاربردی مختلف است. o مثالها: ArrayList، HashMap، مجموعهها، تاریخ، تصادفی.
بسته Java.io: o کلاس هایی را برای ورودی و خروجی سیستم از طریق جریان های داده، سریال سازی و سیستم فایل ارائه می دهد. o مثالها: فایل، جریان ورودی، خروجی جریان، خواننده، رایتر.
بسته Java.nio: o کلاس هایی را برای عملیات ورودی/خروجی غیرمسدود، از جمله بافرها، مجموعه نویسه ها، کانال ها و سیستم های فایل ارائه می دهد. o مثالها: ByteBuffer، FileChannel، Path، Files.
بسته Java.net: o شامل کلاس هایی برای پیاده سازی برنامه های شبکه است. این شامل پشتیبانی از شبکه استاندارد و شبکه ایمن است. o مثالها: سوکت، سرور سوکت، URL، اتصال HttpURLC.
بسته Javax.security: o شامل کلاس ها و رابط های چارچوب امنیتی جاوا است. o مثالها: خط مشی، اصل، مجوزها.
بسته Java.sql: o API را برای دسترسی و پردازش داده های ذخیره شده در یک منبع داده (معمولا یک پایگاه داده رابطه ای) با استفاده از زبان برنامه نویسی جاوا فراهم می کند. o مثالها: Connection، Statement، ResultSet، PreparedStatement.
بسته Javax.xml: o شامل کلاس هایی برای تجزیه اسناد XML با استفاده از API های مختلف مانند DOM، SAX، و StAX است. o مثالها: DocumentBuilder، SAXParser، XMLStreamReader.
چرا کلاس های اصلی جاوا مهم هستند؟• Foundation: این کلاس ها پایه ای را تشکیل می دهند که همه برنامه های جاوا بر اساس آن ساخته می شوند. بدون آنها، محیط اجرای جاوا نمی تواند کار کند.• عملکرد از پیش تعریف شده: آنها عملکردهای از پیش تعریف شده ای را ارائه می دهند که توسعه دهندگان می توانند از آن برای ساخت برنامه ها استفاده کنند و توسعه را سریعتر و آسان تر می کنند.• استانداردسازی: کلاس های اصلی استانداردسازی را در بین برنامه های جاوا تضمین می کنند و قابلیت حمل و سازگاری را ارتقا می دهند.
rt.jar مخفف فایل JAR در زمان اجرا است. این یک جزء حیاتی از Java Runtime Environment (JRE) است و شامل تمام کتابخانه های کلاس اصلی است که توسط ماشین مجازی جاوا (JVM) برای اجرای برنامه های جاوا استفاده می شود.
نکات کلیدی درباره rt.jar
مکان: o معمولاً در پوشه /lib نصب JDK یا JRE شما یافت می شود. برای مثال، اگر JDK شما در C:\Program Files\Java\jdk-14 نصب شده باشد، rt.jar در C:\Program Files\Java\jdk-14\lib\rt.jar قرار خواهد گرفت.
محتویات: o rt.jar شامل تمام کلاس های استاندارد از کتابخانه استاندارد جاوا است که برای زمان اجرا جاوا ضروری هستند. این شامل بستههای اساسی مانند java.lang، java.util، java.io و سایر موارد میشود.
نقش: o کتابخانه های اصلی مورد نیاز برای اجرای برنامه های جاوا را در اختیار JVM قرار می دهد. هنگامی که یک برنامه جاوا اجرا می شود، JVM کلاس ها را از rt.jar بارگیری می کند تا اطمینان حاصل کند که عملکردهای ضروری در دسترس هستند.
Class Loader: o Bootstrap Class Loader مسئول بارگذاری کلاس ها از rt.jar است. این بارکننده کلاس والد در مکانیسم بارگذاری کلاس جاوا است و تضمین می کند که کلاس های اصلی ابتدا بارگیری می شوند و همیشه در دسترس هستند. اهمیت rt.jar • مخزن کلاس متمرکز: تمام کلاس های اصلی را در یک آرشیو متمرکز می کند و دسترسی سریع JVM را به آنها آسان می کند. • استانداردسازی: تضمین می کند که هر برنامه جاوا به کتابخانه های اصلی یکسان دسترسی دارد، و سازگاری و سازگاری را در محیط های مختلف جاوا ارتقا می دهد. • عملکرد: بارگیری کلاس ها از یک فایل JAR می تواند عملکرد را در مقایسه با بارگیری کلاس ها از چندین فهرست، بهبود بخشد. نکته منسوخ شدن با انتشار جاوا 9 و نسخه های بعدی، فایل سنتی rt.jar با سیستم ماژول پلتفرم جاوا (JPMS) که به عنوان Project Jigsaw نیز شناخته می شود، جایگزین شد. این سیستم جدید زمان اجرا جاوا را مدولار می کند و آن را مقیاس پذیرتر و قابل نگهداری تر می کند. در این نسخه ها، کلاس های اصلی به جای اینکه در یک فایل rt.jar جمع شوند، به ماژول ها تقسیم می شوند. اگر از جاوا 9 یا جدیدتر استفاده میکنید، rt.jar را پیدا نمیکنید و در عوض، با سیستم ماژول مواجه میشوید که روشی دقیقتر برای سازماندهی و بارگذاری کلاسهای جاوا ارائه میدهد.
بارگذارهای کلاس نقش مهمی در اجرای یک برنامه جاوا دارند، اما همه بارگذارهای کلاس به طور معمول به طور معمول “اجرا” نمی شوند. در عوض، آنها بخشی از مکانیزم اساسی هستند که کلاس ها را برای اجرا توسط ماشین مجازی جاوا (JVM) در حافظه بارگذاری می کند. نحوه کار لودرهای کلاس
Bootstrap Class Loader: o این بارکننده کلاس اولیه است که مسئول بارگیری کلاس های اصلی جاوا واقع در /lib است. در کد بومی پیاده سازی شده است. o از آنجایی که والد همه بارگذارهای کلاس است، کلاس های ضروری مورد نیاز JVM برای اجرای هر برنامه جاوا را مدیریت می کند.
Extension Class Loader: o این لودر مسئول بارگیری کلاس ها از دایرکتوری های افزونه (/lib/ext) است. o این یک فرزند از Bootstrap Class Loader است و قابلیت های اضافی فراتر از کلاس های اصلی جاوا را فراهم می کند.
Application (System) Class Loader: o این لودر کلاس ها را از مسیر کلاس تعریف شده توسط کاربر بارگیری می کند، که شامل دایرکتوری ها و فایل های JAR است که توسط متغیر محیطی CLASSPATH یا گزینه خط فرمان -cp مشخص شده است. o لودر کلاس پیشفرض است که برای بارگیری کلاسهای خاص برنامه استفاده میشود. سلسله مراتب کلاس لودر • مدل تفویض اختیار: بارگذارهای کلاس از مدل تفویض والد پیروی می کنند. هنگامی که از یک کلاس بارکننده خواسته می شود یک کلاس را بارگذاری کند، ابتدا درخواست را به بارگذار کلاس والد خود واگذار می کند. تنها در صورتی که بارکننده کلاس والد نتواند کلاس را پیدا کند، بارکننده کلاس فرزند سعی می کند آن را بارگیری کند. • چرخه عمر: در حالی که بارگذارهای کلاس خود به معنای یک برنامه کاربردی “در حال اجرا” نیستند، در طول اجرای یک برنامه جاوا به طور مداوم توسط JVM فراخوانی می شوند.
سناریوی نمونههنگامی که یک برنامه جاوا را اجرا می کنید، بارگذاری کلاس معمولاً به این صورت است:
Bootstrap Class Loader کلاس های اصلی مانند java.lang.Object، java.util.HashMap و غیره را بارگیری می کند.
اگر برنامه شما از کتابخانه های افزونه استفاده می کند (مانند برخی از کتابخانه های رمزنگاری)، Extension Class Loader آن کلاس ها را بارگیری می کند.
در نهایت، Application Class Loader کلاسهایی را که بخشی از برنامه شما هستند، از جمله کلاسهای سفارشی و کتابخانههای شخص ثالث اضافه شده به مسیر کلاس شما، بارگیری میکند. این فرآیند بارگذاری سلسله مراتبی و تفویضی تضمین می کند که کلاس ها به طور موثر و پیوسته در حافظه بارگذاری می شوند و محیط زمان اجرا برنامه را حفظ می کند.
Application Class Loader (همچنین به عنوان System Class Loader شناخته می شود) در درجه اول مسئول بارگذاری کد و کلاس های شما در یک برنامه معمولی جاوا است. در اینجا نحوه کار با جزئیات بیشتر آمده است:نقش Application Class Loader:
Loading Application Classes: Application Class Loader کلاس ها را از classpath بارگیری می کند که شامل دایرکتوری ها و فایل های JAR است که توسط متغیر محیطی CLASSPATH یا گزینه -cp command-line مشخص شده است. o مثال: هنگامی که کد جاوا خود را در بایت کد (فایل های کلاس .) کامپایل می کنید و آنها را در یک دایرکتوری یا ساختار بسته قرار می دهید، Application Class Loader این کلاس ها را هنگامی که برنامه شما اجرا می شود بارگذاری می کند.
کتابخانه های شخص ثالث: همچنین کتابخانه های شخص ثالثی را که در مسیر کلاس پروژه خود قرار می دهید بارگیری می کند. o مثال: اگر از کتابخانه ای مانند Apache Commons استفاده می کنید، Application Class Loader این کلاس ها را از فایل های JAR موجود در مسیر کلاس شما بارگیری می کند. فرآیند بارگیری کلاس • هنگامی که یک برنامه جاوا را با استفاده از دستوری مانند java MyClass اجرا می کنید، JVM فرآیند بارگیری کلاس را آغاز می کند. در اینجا یک جریان ساده شده است:
Bootstrap Class Loader: کلاس های زمان اجرا ضروری جاوا (به عنوان مثال java.lang.Object) را بارگیری می کند.
Extension Class Loader: کلاس ها را از فهرست برنامه افزودنی (/lib/ext) بارگیری می کند.
Application Class Loader: در نهایت، کلاس های برنامه شما و هر کتابخانه شخص ثالث را از مسیر کلاس مشخص شده بارگیری می کند.
فرآیند بارگیری کلاس
Bootstrap Class Loader: کلاس های اصلی لازم برای عملیات JVM را از دایرکتوری lib بارگیری می کند.
Extension Class Loader: کلاس ها را از دایرکتوری lib/ext یا دایرکتوری های مشخص بارگیری می کند.
Application Class Loader: کلاس ها را از مسیر کلاس برنامه بارگیری می کند.
سیستم ماژول پلتفرم جاوا (JPMS)
در جاوا 9 و نسخه های بعدی، فایل سنتی rt.jar با سیستم ماژول پلتفرم جاوا (JPMS) که به عنوان Project Jigsaw نیز شناخته می شود، جایگزین شد. در اینجا توضیح مفصلی از آنچه اتفاق افتاده است و نحوه عملکرد فرآیند بارگذاری کلاس در سیستم مدولار آمده است:
مقدمه در جاوا 9:o جاوا 9 سیستم ماژول را برای بهبود مقیاس پذیری و نگهداری JDK معرفی کرد.o فایل یکپارچه rt.jar که شامل تمام کلاسهای اصلی جاوا بود، به ماژولهای کوچکتر و کاملاً تعریف شده تقسیم شد.
JDK مدولار:o JDK اکنون در ماژول هایی سازماندهی شده است که هر کدام هدف و مجموعه ای از کلاس ها دارند.o به عنوان مثال، java.base ماژول پایه ای است که شامل کلاس های ضروری مانند java.lang، java.util و java.io است.
مسیر ماژول:o به جای classpath، Java 9+ از مسیر ماژول برای مکان یابی ماژول ها استفاده می کند.o مسیر ماژول محل JAR های ماژول یا دایرکتوری های حاوی توصیفگرهای ماژول (module-info.class) را مشخص می کند.
توصیفگر ماژول:o هر ماژول دارای یک فایل module-info.java است که نام ماژول و وابستگی های آن را اعلام می کند.
بارگیری کلاس در سیستم مدولار:
لایه های ماژول: o سیستم ماژول از لایه ها برای مدیریت دید و بارگذاری ماژول ها استفاده می کند. o هر لایه ماژول می تواند سلسله مراتب کلاس لودر خود را تعریف کند.
Class Loader برای ماژول ها: o لایه بوت لایه اولیه حاوی ماژول های سیستم است که توسط بارگذار کلاس Bootstrap بارگذاری شده است. o لایه های تعریف شده توسط کاربر را می توان برای ماژول ها و برنامه های کاربردی سفارشی ایجاد کرد. تغییرات عملی • بدون rt.jar: به جای یک فایل JAR در زمان اجرا، کلاس های اصلی اکنون در چندین ماژول توزیع می شوند. • بهبود عملکرد: سیستم مدولار امکان بارگذاری کلاس کارآمدتر و ردپای برنامه های کوچکتر را فراهم می کند. • امنیت پیشرفته: ماژول ها می توانند وابستگی های صریح را تعریف کنند، خطر مشکلات مسیر کلاس را کاهش دهند و کپسولاسیون را بهبود بخشند.
تغییر از rt.jar به سیستم ماژول در Java 9+ نشان دهنده پیشرفت قابل توجهی در نحوه مدیریت جاوا بارگذاری کلاس و وابستگی ها است. این رویکرد ماژولار عملکرد، مقیاس پذیری و امنیت بهبود یافته را ارائه می دهد و آن را به یک راه حل قوی برای برنامه های جاوا مدرن تبدیل می کند.
در جاوا، سه نوع اصلی بارگذار کلاس وجود دارد:
- Bootstrap Class Loader • تابع: کتابخانه های اصلی جاوا واقع در دایرکتوری /lib (به عنوان مثال rt.jar، resources.jar) را بارگیری می کند. • پیاده سازی شده در: کد بومی (معمولاً C یا C++). • Role: والد تمام بارگذارهای کلاس است و خود والد ندارد. این مسئول بارگذاری کلاس های اساسی مورد نیاز JVM است.
- برنامه افزودنی (یا پلتفرم) کلاس Loader • تابع: کلاس ها را از فهرست های برنامه افزودنی بارگیری می کند (/lib/ext یا هر دایرکتوری دیگری که توسط ویژگی سیستم java.ext.dirs مشخص شده است). • نقش: قابلیت ارائه شده توسط کتابخانه های اصلی جاوا را گسترش می دهد.
- Application (یا System) Class Loader • Function: کلاس ها را از مسیر class، که شامل دایرکتوری ها و فایل های JAR مشخص شده توسط متغیر محیطی CLASSPATH یا گزینه خط فرمان -cp است، بارگیری می کند. • Role: بارگذار کلاس پیشفرض است که توسط JVM برای بارگیری کلاسهای سطح برنامه استفاده میشود.
/lib
• مکان: این دایرکتوری داخل نصب JDK (کیت توسعه جاوا) شما است. قسمت نشان دهنده دایرکتوری ریشه ای است که JDK شما در آن نصب شده است. به عنوان مثال، اگر JDK شما در C:\Program Files\Java\jdk-14 نصب شده باشد، lib / C:\Program Files\Java\jdk-14\lib خواهد بود.
• Contents: این فهرست شامل کتابخانه های ضروری و منابع مورد نیاز زمان اجرا جاوا است. این شامل کلاس های اصلی جاوا است، مانند کلاس های موجود در rt.jar که کتابخانه زمان اجرا است.
• Role: کلاس های این دایرکتوری توسط Bootstrap Class Loader بارگذاری می شوند که بارکننده کلاس والد در سلسله مراتب بارگذاری کلاس است. اینها کلاس های اساسی هستند که توسط JVM برای اجرای برنامه های جاوا مورد نیاز است.
/lib/ext
• مکان: این یک زیر شاخه در دایرکتوری lib نصب JDK شما است. برای مثال، اگر JDK شما در C:\Program Files\Java\jdk-14 نصب شده باشد، /lib/ext C:\Program Files\Java\jdk-14\lib\ext خواهد بود.
• محتوا: این دایرکتوری برای برنامه های افزودنی به پلت فرم اصلی جاوا در نظر گرفته شده است. میتوانید فایلهای JAR را در اینجا قرار دهید که کلاسهای استاندارد جاوا را گسترش میدهند.
• نقش: کلاس ها و کتابخانه های این فهرست توسط Extension Class Loader بارگذاری می شوند. کتابخانههای اضافی را بارگیری میکند که بخشی از زمان اجرا اصلی جاوا نیستند، اما همچنان بخشی از پلتفرم استاندارد جاوا هستند.
شما معمولاً نیازی به تعامل مستقیم با کلاس لودرها ندارید. با این حال، درک نحوه کار آنها برای اشکال زدایی یا بهینه سازی برنامه های کاربردی پیچیده مفید است.
در اینجا خلاصه ای سریع از زمانی که ممکن است نیاز باشد با کلاس بارگذار در کد جاوا خود سر و کار داشته باشید، آمده است:
لودرهای کلاس سفارشی
اگر بخواهید کلاس ها را به روشی متفاوت از رفتار پیش فرض بارگیری کنید، ممکن است یک بارکننده کلاس سفارشی ایجاد کنید. برای مثال، ممکن است لازم باشد:
• بارگذاری کلاس ها از یک مکان غیر استاندارد.
• پیاده سازی یک سیستم پلاگین که در آن کلاس ها به صورت پویا بارگذاری می شوند.
موارد استفاده رایج برای لودرهای کلاس سفارشی
• بارگذاری پویا: بارگیری کلاس ها از شبکه، پایگاه داده یا در طول زمان اجرا از مکان های ارائه شده توسط کاربر.
• جداسازی: اجرای چندین نسخه از یک کتابخانه در یک برنامه.
• پلاگین ها: پیاده سازی یک معماری پلاگین که در آن پلاگین ها می توانند در زمان اجرا بدون راه اندازی مجدد برنامه بارگذاری یا تخلیه شوند.
نکات کاربردی
• Use Case Specific: اکثر برنامه ها نیازی به بارگذار کلاس سفارشی ندارند. آنها معمولاً در سناریوهای پیشرفته استفاده می شوند.
• درک سلسله مراتب Class Loader: قبل از پیاده سازی کلاس loader های سفارشی، مطمئن شوید که رابطه والد-فرزند در کلاس loader را درک کرده اید.
لودرهای کلاس
- Bootstrap Class Loader o Function: کتابخانه های اصلی جاوا را از /lib بارگیری می کند. o مثال: کلاس هایی مانند java.lang.String، java.util.ArrayList را بارگیری می کند. o جزئیات: در کد بومی پیاده سازی شده و والد ندارد.
- Extension (یا Platform) Class Loader o Function: کلاس ها را از /lib/ext یا سایر دایرکتوری های مشخص شده توسط ویژگی سیستم java.ext.dirs بارگیری می کند. o مثال: کتابخانه های اضافی مانند javax.crypto.Cipher را بارگیری می کند. o جزئیات: Child of the Bootstrap Class Loader.
- Application (یا System) Class Loader o Function: کلاس ها را از مسیر class، شامل دایرکتوری ها و فایل های JAR مشخص شده توسط متغیر محیطی CLASSPATH یا گزینه خط فرمان -cp بارگیری می کند. o مثال: کلاس های برنامه شما را بارگذاری می کند. o جزئیات: Child of Extension Class Loader.
نکات کلیدی
• Bootstrap Class Loader: کلاس های اصلی جاوا را برای JVM بارگیری می کند.
• Extension Class Loader: کتابخانه های برنامه افزودنی را از /lib/ext بارگیری می کند.
• Application Class Loader: کلاس های خاص برنامه را از مسیر کلاس بارگیری می کند.
کلاس های Core Java به کلاس های اساسی اشاره می کنند که برای عملکرد اساسی زبان برنامه نویسی جاوا و محیط زمان اجرا ضروری هستند. این کلاس ها بخشی از کتابخانه استاندارد جاوا هستند و در کیت توسعه جاوا (JDK) گنجانده شده اند. آنها توسط Bootstrap Class Loader بارگذاری می شوند و در پوشه /lib قرار دارند.
دسته بندی های کلیدی کلاس های اصلی جاوا
- بسته Java.lang: o شامل کلاس های اساسی است که برای زبان برنامه نویسی جاوا ضروری هستند. o مثالها: رشته، شیء، ریاضی، سیستم، موضوع.
- بسته Java.util: o شامل چارچوب مجموعه ها، کلاس های مجموعه قدیمی، مدل رویداد، امکانات تاریخ و زمان، بین المللی سازی، و کلاس های کاربردی مختلف است. o مثالها: ArrayList، HashMap، مجموعهها، تاریخ، تصادفی.
- بسته Java.io: o کلاس هایی را برای ورودی و خروجی سیستم از طریق جریان های داده، سریال سازی و سیستم فایل ارائه می دهد. o مثالها: فایل، جریان ورودی، خروجی جریان، خواننده، رایتر.
- بسته Java.nio: o کلاس هایی را برای عملیات ورودی/خروجی غیرمسدود، از جمله بافرها، مجموعه نویسه ها، کانال ها و سیستم های فایل ارائه می دهد. o مثالها: ByteBuffer، FileChannel، Path، Files.
- بسته Java.net: o شامل کلاس هایی برای پیاده سازی برنامه های شبکه است. این شامل پشتیبانی از شبکه استاندارد و شبکه ایمن است. o مثالها: سوکت، سرور سوکت، URL، اتصال HttpURLC.
- بسته Javax.security: o شامل کلاس ها و رابط های چارچوب امنیتی جاوا است. o مثالها: خط مشی، اصل، مجوزها.
- بسته Java.sql: o API را برای دسترسی و پردازش داده های ذخیره شده در یک منبع داده (معمولا یک پایگاه داده رابطه ای) با استفاده از زبان برنامه نویسی جاوا فراهم می کند. o مثالها: Connection، Statement، ResultSet، PreparedStatement.
- بسته Javax.xml: o شامل کلاس هایی برای تجزیه اسناد XML با استفاده از API های مختلف مانند DOM، SAX، و StAX است. o مثالها: DocumentBuilder، SAXParser، XMLStreamReader.
چرا کلاس های اصلی جاوا مهم هستند؟
• Foundation: این کلاس ها پایه ای را تشکیل می دهند که همه برنامه های جاوا بر اساس آن ساخته می شوند. بدون آنها، محیط اجرای جاوا نمی تواند کار کند.
• عملکرد از پیش تعریف شده: آنها عملکردهای از پیش تعریف شده ای را ارائه می دهند که توسعه دهندگان می توانند از آن برای ساخت برنامه ها استفاده کنند و توسعه را سریعتر و آسان تر می کنند.
• استانداردسازی: کلاس های اصلی استانداردسازی را در بین برنامه های جاوا تضمین می کنند و قابلیت حمل و سازگاری را ارتقا می دهند.
rt.jar مخفف فایل JAR در زمان اجرا است. این یک جزء حیاتی از Java Runtime Environment (JRE) است و شامل تمام کتابخانه های کلاس اصلی است که توسط ماشین مجازی جاوا (JVM) برای اجرای برنامه های جاوا استفاده می شود.
نکات کلیدی درباره rt.jar
- مکان: o معمولاً در پوشه /lib نصب JDK یا JRE شما یافت می شود. برای مثال، اگر JDK شما در C:\Program Files\Java\jdk-14 نصب شده باشد، rt.jar در C:\Program Files\Java\jdk-14\lib\rt.jar قرار خواهد گرفت.
- محتویات: o rt.jar شامل تمام کلاس های استاندارد از کتابخانه استاندارد جاوا است که برای زمان اجرا جاوا ضروری هستند. این شامل بستههای اساسی مانند java.lang، java.util، java.io و سایر موارد میشود.
- نقش: o کتابخانه های اصلی مورد نیاز برای اجرای برنامه های جاوا را در اختیار JVM قرار می دهد. هنگامی که یک برنامه جاوا اجرا می شود، JVM کلاس ها را از rt.jar بارگیری می کند تا اطمینان حاصل کند که عملکردهای ضروری در دسترس هستند.
- Class Loader: o Bootstrap Class Loader مسئول بارگذاری کلاس ها از rt.jar است. این بارکننده کلاس والد در مکانیسم بارگذاری کلاس جاوا است و تضمین می کند که کلاس های اصلی ابتدا بارگیری می شوند و همیشه در دسترس هستند. اهمیت rt.jar • مخزن کلاس متمرکز: تمام کلاس های اصلی را در یک آرشیو متمرکز می کند و دسترسی سریع JVM را به آنها آسان می کند. • استانداردسازی: تضمین می کند که هر برنامه جاوا به کتابخانه های اصلی یکسان دسترسی دارد، و سازگاری و سازگاری را در محیط های مختلف جاوا ارتقا می دهد. • عملکرد: بارگیری کلاس ها از یک فایل JAR می تواند عملکرد را در مقایسه با بارگیری کلاس ها از چندین فهرست، بهبود بخشد. نکته منسوخ شدن با انتشار جاوا 9 و نسخه های بعدی، فایل سنتی rt.jar با سیستم ماژول پلتفرم جاوا (JPMS) که به عنوان Project Jigsaw نیز شناخته می شود، جایگزین شد. این سیستم جدید زمان اجرا جاوا را مدولار می کند و آن را مقیاس پذیرتر و قابل نگهداری تر می کند. در این نسخه ها، کلاس های اصلی به جای اینکه در یک فایل rt.jar جمع شوند، به ماژول ها تقسیم می شوند. اگر از جاوا 9 یا جدیدتر استفاده میکنید، rt.jar را پیدا نمیکنید و در عوض، با سیستم ماژول مواجه میشوید که روشی دقیقتر برای سازماندهی و بارگذاری کلاسهای جاوا ارائه میدهد.
بارگذارهای کلاس نقش مهمی در اجرای یک برنامه جاوا دارند، اما همه بارگذارهای کلاس به طور معمول به طور معمول “اجرا” نمی شوند. در عوض، آنها بخشی از مکانیزم اساسی هستند که کلاس ها را برای اجرا توسط ماشین مجازی جاوا (JVM) در حافظه بارگذاری می کند.
نحوه کار لودرهای کلاس
- Bootstrap Class Loader: o این بارکننده کلاس اولیه است که مسئول بارگیری کلاس های اصلی جاوا واقع در /lib است. در کد بومی پیاده سازی شده است. o از آنجایی که والد همه بارگذارهای کلاس است، کلاس های ضروری مورد نیاز JVM برای اجرای هر برنامه جاوا را مدیریت می کند.
- Extension Class Loader: o این لودر مسئول بارگیری کلاس ها از دایرکتوری های افزونه (/lib/ext) است. o این یک فرزند از Bootstrap Class Loader است و قابلیت های اضافی فراتر از کلاس های اصلی جاوا را فراهم می کند.
- Application (System) Class Loader: o این لودر کلاس ها را از مسیر کلاس تعریف شده توسط کاربر بارگیری می کند، که شامل دایرکتوری ها و فایل های JAR است که توسط متغیر محیطی CLASSPATH یا گزینه خط فرمان -cp مشخص شده است. o لودر کلاس پیشفرض است که برای بارگیری کلاسهای خاص برنامه استفاده میشود. سلسله مراتب کلاس لودر • مدل تفویض اختیار: بارگذارهای کلاس از مدل تفویض والد پیروی می کنند. هنگامی که از یک کلاس بارکننده خواسته می شود یک کلاس را بارگذاری کند، ابتدا درخواست را به بارگذار کلاس والد خود واگذار می کند. تنها در صورتی که بارکننده کلاس والد نتواند کلاس را پیدا کند، بارکننده کلاس فرزند سعی می کند آن را بارگیری کند. • چرخه عمر: در حالی که بارگذارهای کلاس خود به معنای یک برنامه کاربردی “در حال اجرا” نیستند، در طول اجرای یک برنامه جاوا به طور مداوم توسط JVM فراخوانی می شوند.
سناریوی نمونه
هنگامی که یک برنامه جاوا را اجرا می کنید، بارگذاری کلاس معمولاً به این صورت است:
- Bootstrap Class Loader کلاس های اصلی مانند java.lang.Object، java.util.HashMap و غیره را بارگیری می کند.
- اگر برنامه شما از کتابخانه های افزونه استفاده می کند (مانند برخی از کتابخانه های رمزنگاری)، Extension Class Loader آن کلاس ها را بارگیری می کند.
- در نهایت، Application Class Loader کلاسهایی را که بخشی از برنامه شما هستند، از جمله کلاسهای سفارشی و کتابخانههای شخص ثالث اضافه شده به مسیر کلاس شما، بارگیری میکند. این فرآیند بارگذاری سلسله مراتبی و تفویضی تضمین می کند که کلاس ها به طور موثر و پیوسته در حافظه بارگذاری می شوند و محیط زمان اجرا برنامه را حفظ می کند.
Application Class Loader (همچنین به عنوان System Class Loader شناخته می شود) در درجه اول مسئول بارگذاری کد و کلاس های شما در یک برنامه معمولی جاوا است. در اینجا نحوه کار با جزئیات بیشتر آمده است:
نقش Application Class Loader:
- Loading Application Classes: Application Class Loader کلاس ها را از classpath بارگیری می کند که شامل دایرکتوری ها و فایل های JAR است که توسط متغیر محیطی CLASSPATH یا گزینه -cp command-line مشخص شده است. o مثال: هنگامی که کد جاوا خود را در بایت کد (فایل های کلاس .) کامپایل می کنید و آنها را در یک دایرکتوری یا ساختار بسته قرار می دهید، Application Class Loader این کلاس ها را هنگامی که برنامه شما اجرا می شود بارگذاری می کند.
- کتابخانه های شخص ثالث: همچنین کتابخانه های شخص ثالثی را که در مسیر کلاس پروژه خود قرار می دهید بارگیری می کند. o مثال: اگر از کتابخانه ای مانند Apache Commons استفاده می کنید، Application Class Loader این کلاس ها را از فایل های JAR موجود در مسیر کلاس شما بارگیری می کند. فرآیند بارگیری کلاس • هنگامی که یک برنامه جاوا را با استفاده از دستوری مانند java MyClass اجرا می کنید، JVM فرآیند بارگیری کلاس را آغاز می کند. در اینجا یک جریان ساده شده است:
- Bootstrap Class Loader: کلاس های زمان اجرا ضروری جاوا (به عنوان مثال java.lang.Object) را بارگیری می کند.
- Extension Class Loader: کلاس ها را از فهرست برنامه افزودنی (/lib/ext) بارگیری می کند.
- Application Class Loader: در نهایت، کلاس های برنامه شما و هر کتابخانه شخص ثالث را از مسیر کلاس مشخص شده بارگیری می کند.
فرآیند بارگیری کلاس
- Bootstrap Class Loader: کلاس های اصلی لازم برای عملیات JVM را از دایرکتوری lib بارگیری می کند.
- Extension Class Loader: کلاس ها را از دایرکتوری lib/ext یا دایرکتوری های مشخص بارگیری می کند.
- Application Class Loader: کلاس ها را از مسیر کلاس برنامه بارگیری می کند.
سیستم ماژول پلتفرم جاوا (JPMS)
در جاوا 9 و نسخه های بعدی، فایل سنتی rt.jar با سیستم ماژول پلتفرم جاوا (JPMS) که به عنوان Project Jigsaw نیز شناخته می شود، جایگزین شد. در اینجا توضیح مفصلی از آنچه اتفاق افتاده است و نحوه عملکرد فرآیند بارگذاری کلاس در سیستم مدولار آمده است:
-
مقدمه در جاوا 9:
o جاوا 9 سیستم ماژول را برای بهبود مقیاس پذیری و نگهداری JDK معرفی کرد.
o فایل یکپارچه rt.jar که شامل تمام کلاسهای اصلی جاوا بود، به ماژولهای کوچکتر و کاملاً تعریف شده تقسیم شد. -
JDK مدولار:
o JDK اکنون در ماژول هایی سازماندهی شده است که هر کدام هدف و مجموعه ای از کلاس ها دارند.
o به عنوان مثال، java.base ماژول پایه ای است که شامل کلاس های ضروری مانند java.lang، java.util و java.io است. -
مسیر ماژول:
o به جای classpath، Java 9+ از مسیر ماژول برای مکان یابی ماژول ها استفاده می کند.
o مسیر ماژول محل JAR های ماژول یا دایرکتوری های حاوی توصیفگرهای ماژول (module-info.class) را مشخص می کند. -
توصیفگر ماژول:
o هر ماژول دارای یک فایل module-info.java است که نام ماژول و وابستگی های آن را اعلام می کند.
بارگیری کلاس در سیستم مدولار:
- لایه های ماژول: o سیستم ماژول از لایه ها برای مدیریت دید و بارگذاری ماژول ها استفاده می کند. o هر لایه ماژول می تواند سلسله مراتب کلاس لودر خود را تعریف کند.
- Class Loader برای ماژول ها: o لایه بوت لایه اولیه حاوی ماژول های سیستم است که توسط بارگذار کلاس Bootstrap بارگذاری شده است. o لایه های تعریف شده توسط کاربر را می توان برای ماژول ها و برنامه های کاربردی سفارشی ایجاد کرد. تغییرات عملی • بدون rt.jar: به جای یک فایل JAR در زمان اجرا، کلاس های اصلی اکنون در چندین ماژول توزیع می شوند. • بهبود عملکرد: سیستم مدولار امکان بارگذاری کلاس کارآمدتر و ردپای برنامه های کوچکتر را فراهم می کند. • امنیت پیشرفته: ماژول ها می توانند وابستگی های صریح را تعریف کنند، خطر مشکلات مسیر کلاس را کاهش دهند و کپسولاسیون را بهبود بخشند.
تغییر از rt.jar به سیستم ماژول در Java 9+ نشان دهنده پیشرفت قابل توجهی در نحوه مدیریت جاوا بارگذاری کلاس و وابستگی ها است. این رویکرد ماژولار عملکرد، مقیاس پذیری و امنیت بهبود یافته را ارائه می دهد و آن را به یک راه حل قوی برای برنامه های جاوا مدرن تبدیل می کند.