JDK ،JRE و JVM چه تفاوتهایی با هم دارند؟
یکی از سوالاتی که برای توسعهدهندگان برنامه های جاوا مطرح است، تفاوت های میان JRE، JDK و JVM است. در این نوشته با ما همراه باشید تا به این سوال پاسخ دهیم.
کیت توسعه جاوا (JDK)
یک محیط توسعه نرمافزاری است که برای توسعه برنامههای جاوا و اپلتها استفاده میشود. این کیت شامل محیط زمان اجرا JRE، یک مفسر/لود کننده (جاوا)، یک کامپایلر (javac)، یک آرشیو کنده (jar)، یک تولیدکننده مستندات (Javadoc) و ابزارهای دیگری است که برای توسعه جاوا ضروری هستند.
محیط زمان اجرای جاوا
JRE مخفف محیط اجرایی جاوا است و ممکن است بهصورت Java RTE نیز نوشته شود. محیط اجرایی جاوا کمترین نیازمندیهای اجرای یک برنامه جاوا را تأمین میکند: این نیازمندیها شامل ماشین مجازی جاوا JVM، کلاسهای هسته و فایلهای پشتیبانی هستند.
ماشین مجازی جاوا
ماشین مجازی جاوا شامل بخشهای زیر است:
- یک مشخصات که کارکرد ماشین مجازی جاوا را مشخص میکند؛ اما پیادهسازی برای انتخاب الگوریتم مجزا است. پیادهسازی آن از سوی شرکت Sun و شرکتهای دیگر انجام یافته است.
- یک پیادهسازی، برنامه رایانهای است که الزامات خصوصیات JVM را تأمین میکند.
- نمونه اجرایی: هر زمان که دستور جاوا را در خط فرمان مینویسید تا یک کلاس جاوا اجرا شود یک نمونه از JVM اجرا میشود.
برای درک تفاوتهای بین این سه مورد به توضیحات زیر نگاه کنید.
تفاوت
- JDK- کیت توسعه جاوا یک کیت است که محیطی برای توسعه و اجرای برنامههای اجرا ارائه میکند. JDK یک کیت (بسته) است که شامل موارد زیر است:
- ابزارهای توسعهای (برای ایجاد محیطی جهت توسعه برنامههای جاوا)
- JRE (برای اجرای برنامه جاوا)
نکته: JDK تنها از سوی توسعهدهندگان جاوا استفاده میشود.
- JRE – محیط اجرایی جاوا یک بسته نصب است که محیطی برای اجرا (و نه توسعه) برنامههای جاوا در دستگاهی که نصب میشود فراهم میکند. JRE تنها از سوی کسانی استفاده میشود که صرفاً قصد دارند برنامههای جاوا را اجرا کنند مثلاً کاربران سیستم.
- JVM – ماشین مجازی جاوا یک بخش بسیار مهم از JDK و همچنین JRE است زیرا در هر دو آنها گنجانده شده است. هر زمان که برنامهی جاوا با استفاده از JRE یا JDK اجرا میشود به JVM میرود و JVM مسئول اجرای خز به خط برنامه جاوا است ازاینرو به نام مفسر نیز شناخته میشود.
JRE و JDK چگونه عمل میکنند؟
JRE از چه تشکیل یافته است؟
JRE شامل اجزای زیر است:
- فناوریهای توزیع: شامل توزیع، جاوا وب استارت و جاوا پلاگین.
- کیت ابزارهای رابط کاربری: شامل کیت ابزار پنجره مجرد AWT، سوئینگ، جاوا 2D، دسترسی، I/O تصویر، خدمات پرینت، صدا، درگ اند دراپ DnD و متدهای ورودی.
- کتابخانههای یکپارچهسازی: شامل زبان تعریف رابط IDL، اتصالات پایگاه داده جاوا JDBC، رابط دایرکتوری و نامگذاری جاوا JNDI، فراخوانی متدها از راه دور RMI، پروتکل فراخوانی متدها از راه دور بر روی اینترنت RMI-IIOP و اسکریپت نویسی.
- کتابخانههای پایهای دیگر: شامل پشتیبانی بینالمللی، ورودی/ خروجی I/O، مکانیسم گسترش، بینز، اکستنشنهای مدیریت جاوا JMX، رابط بومی جاوا JNI، ریاضی، شبکهبندی، مکانیسم Override، امنیت، سریالسازی و جاوا برای پردازش XML (XML JAXP).
- کتابخانههای بر اساس Lang و util که شامل Lang و util، مدیریت، نسخه بندی، zip، ابزارها، بازتاب، مجموعهها، کاربردهای همزمانی، آرشیو جاوا Jar، گزارش دهی، API ترجیحی، اشیای ارجاعی و عبارتهای Regular میشود.
- ماشین مجازی جاوا JVM شامل کلاینت هاتاسپات جاوا و ماشینهای مجازی سرور میشود.
JRE چگونه عمل میکند؟
برای درک نحوه عملکرد JRE به سورسفایل جاوا که به نام Example.java ذخیره شده است نگاهی میاندازیم این فایل بهصورت مجموعهای از بایت کدها کامپایل شده است که در یک فایل.class ذخیره شده است. در اینجا نام آن Example.class خواهد بود.
نمودار زیر آنچه در زمان کامپایل رخ میدهد را نشان میدهد.
اعمال زیر در زمان اجرا اتفاق میافتند:
- لودکننده کلاس
لودکننده کلاس همه کلاسهای موردنیاز برای اجرای یک برنامه را لود میکند. این جزء با جدا کردن فضاهای نام سیستم فایل محلی از آنهایی که از شبکه وارد شدهاند امنیت کلاس را تضمین میکند. این فایلها یا از روی دیسک لود میشوند یا شبکه و یا دیگر منابع.
- بررسیکننده کد بایت
JVM کد را در اختیار بررسیکننده کد بایت قرار میدهد تا فرمت آن را بررسی کند و کدهای غیر معتبر را شناسایی کند. برای مثال کدهای غیر معتبر کدهایی هستند که حق دسترسی بر روی اشیا را نقض میکنند یا از پیادهسازی اشارهگرها تخطی میکنند. بررسیکننده کد بایت تضمین میکند که کد خصوصیات موردنظر JVM را دارد و یکپارچگی سیستم را به خطر نمیاندازد.
- مفسر
در زمان اجرا کد بایت لود میشود و توسط مفسر بررسی و اجرا میشود. مفسر این دو کارکرد را دارد:
- اجرای کد بایت
- ایجاد فراخوانهای متناسب با سختافزاری که روی آن اجرا میشود.
هر دو عملکرد در تصویر زیر مشخص هستند:
برای درک تعاملهای بین JDK و JRE نمودار زیر را ببینید:
JVM چگونه عمل میکند؟
JVM نمونهای از JRE در زمان اجزای یک برنامه جاوا است. معمولاً به نام مفسر زمان اجرا شناخته میشود. JVM به طور عمده به انتزاع پیادهسازی درونی برنامهنویسانی کمک میکند که از کتابخانههای JDK استفاده میکنند.