فرق JDK و JRE چیست؟ و تفاوت آنها با JVM
در دو سه مقاله قبلی در مورد JDK و JVM صحبت کردیم و گفتیم چی هستند اما یک واژه جدید داریم با عنوان JRE که آشنا نیست و در این مقاله میخواهیم فرق JDK و JRE چیست؟ و تفاوت آنها با JVM رو مورد بررسی قرار دهیم. ابتدا توضیح میدهیم که JRE در جاوا چیست و چه کاربرد دارد و در ادامه فرقش با JDK و JVM رو کامل توضیح میدهیم. پیشنهاد میکنم ابتدا مقاله همه چیز در مورد ماشین مجازی جاوا – دانلود Netbeans With JDK زیر رو مطالعه کنید و بعد از مطالعه این دو مقاله بیایید و این مقاله رو بخونید. در این مقاله به صورت کامل و دقیق گفتیم JVM و چه رابطه ای با JDK دارد.
قبل از اینکه شروع به جواب دادن سوال JRE در جاوا چیست کنیم یک مقدار از مقاله قبلی رو در اینجا بیاوریم که متوجه شید JVM و JDK چی هستند بعد به سراغ JRE میرویم.
JVM چیست ؟
برای اجرای برنامه های کامپایل شده به زبان جاوا نیاز به برنامه یا ماشینی داریم که به آن ماشین مجازی جاوا (JVM) می گویند. زمانی که در مورد اپلیکشینهای جاوا صحبت میکنیم، حتما میبایست JVM بر روی ماشین شما نصب باشد تا قابلیت اجرا شدن داشته باشد.
JVM وظایف اصلی زیر را اجرا می کند:
- باگذاری کد
- بررسی صحت و درستی کد
- اجرای کد
- ارائه ی بستر اجرا (runtime environment)
JDK چیست؟
یکی از سوالتی که فکر کاربران رو درگیر خود کرده، اینست که JDK در جاوا چیست؟ JDK مخفف Java Development Toolkit است. ترکیبی از کامپایلر زبان جاوا، کلاس های کتابخانه ای (Java Class Libraries)، ماشین مجازی جاوا و فایل راهنمای آنها می باشد. برای اینکه ما بتوانیم با استفاده از زبان برنامه نویسی جاوا، کدنویسی کنیم و برنامه بنویسیم باید حتما JDK رو نصب کنیم.
حال که متوجه شدیم JVM و JDK چی هستند به سراغ JRE میرویم. حتما حتما مقاله همه چیز در مورد ماشین مجازی جاوا – دانلود Netbeans With JDK را مطالعه کنید.
JRE در جاوا چیست
JRE سرنام واژگان Java Runtime Environment به معنای محیط یا بستر اجرای برنامه ی جاوا می باشد. همان طور که از اسم آن پیداست، runtime environment محیط اجرا برنامه های جاوا را فراهم می کند. JRE پیاده سازی JVM بوده و به طور فیزیکی وجود دارد. همچنین دربردارنده ی مجموعه ای از کتابخانه ها و سایر فایل های مورد نیاز JVM می باشد. پیاده سازی های حقیقی از JVM ها را علاوه بر Sun Micro، شرکت های دیگر نیز به صورت مداوم و بروز منتشر می کنند.
JRE شامل اجزای زیر است:
- فناوریهای توزیع: شامل توزیع، جاوا وب استارت و جاوا پلاگین.
- کیت ابزارهای رابط کاربری: شامل کیت ابزار پنجره مجرد AWT، سوئینگ، جاوا ۲D، دسترسی، 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 استفاده میکنند.
نکته مهم: JVM، JRE و JDK وابسته به پلت فرم هستند چرا که تنظیمات و کانفیگ هر سیستم عامل متفاوت است. با این حال خود Java به هیچ بستر اجرایی وابستگی ندارد و کدهای نوشته شده با آن در تمامی پلت فرم ها قابل اجرا می باشد.
برای درک درست این موضوع پیشنهاد میکنم تصویر زیر رو مشاهنده کنید: