تفاوت JVM ،JRE و JDK در جاوا چیست ؟
مقاله

تفاوت JVM ،JRE و JDK در جاوا چیست ؟

چه ارتباطی بین JVM ،JRE و JDK در فرآیند توسعه یک نرم افزار به زبان جاوا (Java) وجود دارد و با وجود تفاوت JVM ،JRE و JDK در جاوا، این سه، چگونه با هم کار می کنند؟

بدون شک یکی از محبوب ترین زبان های برنامه نویسی که امروزه در توسعه نرم افزار ها مورد استفاده قرار میگیرد، Java است. جاوا را میتوان به عنوان مناسب ترین زبان برنامه نویسی برای توسعه نرم افزار های سمت سرور، توسعه بازی های کامپیوتری، نرم افزار های موبایل و کامپیوتر انتخاب کرد.

در ادامه این مقاله می توانید دریابید که چگونه Java Virtual Machine یا به اختصار JVM و Java Runtime Environment یا همان JRE و Java Development Kit یا JDK، هرکدام در فرآیند توسعه نرم افزاری با زبان برنامه نویسی Java، در کنار یکدیگر کار می کنند و تفاوت JVM ،JRE و JDK در جاوا چیست و چگونه از یکدیگر متمایز می شوند.

ماشین مجازی جاوا (JVM) چیست؟

Java Virtual Machine یا JVM بایت کد (bytecode) جاوا را لود کرده و پس از تایید، آن را اجرا می کند. JVM به عنوان مفسر یا هسته زبان برنامه نویسی جاوا شناخته می شود زیرا برنامه های نوشته شده به زبان جاوا را به اجرا در می آورد.

نقش JVM در زبان جاوا

JVM به طور خاص مسئول تبدیل بایت کد به کد مخصوص ماشین بوده و وجود آن در هر دو بخش دیگر یعنی JDK و JRE ضروری است. همچنین وابسته به پلتفرم می باشد و عملکردهای زیادی، از جمله مدیریت حافظه و امنیت را انجام می دهد. علاوه بر این، JVM می تواند نرم افزار های نوشته شده به زبان های دیگر را اجرا کند البته به شرطی که به بایت کد جاوا ترجمه شده باشند.

Java Native Interface یا (JNI) یک فریم ورک برنامه نویسی است که کد جاوای در حال اجرا توسط JVM را قادر می سازد تا با نرم افزار های مرتبط با یک قطعه سخت افزاری یا یک سیستم عامل خاص، ارتباط برقرار کند.

به این برنامه ها native applications گفته می شود و اغلب می توانند به زبان های دیگر نیز نوشته شوند. از روش های native برای انتقال کدهای native نوشته شده به زبان های دیگر، به یک برنامه جاوا استفاده می شوند.

JVM از سه جزء یا زیر سیستم اصلی تشکیل شده است:

تفاوت JVM ، JRE و JDK در جاوا چیست

تصویر (1)

  • Class Loader Subsystem مسئول لود، لینک دادن و مقداردهی اولیه یک فایل کلاس جاوا است. این زیرسیستم به عنوان کلاس بارگذاری پویا شناخته می شود.
  • Runtime Data Areas شامل ناحیه متد ها، PC registers (نوعی حافظه کامپیوتری هستند که برای پذیرش، ذخیره و انتقال سریع داده ها و دستورالعمل های مورد نیاز CPU، استفاده می شود)، نواحی مربوط به پشته ها (stacks) و Thread ها (اجزا یا کدهای مجازی هستند که هسته فیزیکی یک CPU را به چند هسته مجازی تقسیم می کنند) هستند.
  • Execution Engine شامل مفسر، کامپایلر و منطقه garbage collection (نوعی مدیریت خودکار حافظه) است.

Java Runtime Environment یا (JRE) چیست؟

Java Runtime Environment یا JRE، مجموعه ای از ابزارهای نرم افزاری است که مسئول اجرای نرم افزار یا برنامه جاوا روی سیستم شما می باشد. JRE از فضای پشته برای تخصیص حافظه پویا به اشیاء جاوا استفاده می کند. همچنین JRE در JDB (Java Debugging) استفاده می شود.

نقش JRE در جاوا

اگر برنامه نویسی بخواهد با استفاده از دستورات جاوا یک برنامه تحت جاوا را اجرا کند، باید JRE را نصب نماید.

اجزای JRE

در کنار ماشین مجازی جاوا، JRE نیز شامل طیف متنوعی از ابزارهای پشتیبانی نرم افزاری و امکانات است که می توانید با استفاده از آنها، بیشترین بهره را از برنامه‌های جاوا ببرید.

  • راه‌حل‌های Deployment: فناوری‌های Deployment مانند Java Web Start و Java Plugin به عنوان بخشی از JRE هستند که فعالسازی برنامه‌ها را ساده می‌کنند و پشتیبانی پیشرفته‌ای را برای بروزرسانی‌های آتی جاوا ارائه می دهند.
  • ابزارهای توسعه: JRE حاوی ابزارهای توسعه نیز می باشد که برای کمک به توسعه دهندگان جهت بهبود رابط کاربری طراحی شده اند. برخی از این ابزارها شامل موارد زیر است:

1. Java 2D: یک رابط برنامه نویسی نرم افزاری (API) که برای ترسیم گرافیک های دو بعدی در زبان جاوا استفاده می شود. توسعه دهندگان می توانند با استفاده از آن، رابط های کاربری حرفه ای، جلوه های ویژه، بازی ها و انیمیشن ها را ایجاد کنند.

2. Abstract Window Toolkit یا (AWT): یک رابط کاربری گرافیکی (GUI) است که برای ایجاد اشیا، دکمه‌ها، نوارهای اسکرول و پنجره‌ها استفاده می‌شود.

3. Swing: یک رابط کاربری گرافیکی سبک وزن دیگر است که مجموعه ای غنی از ویجت ها را برای تنظیم انعطاف پذیری و رابط کاربری به صورت دلخواه، ارائه می کند.

  • ادغام کتابخانه‌ها: Java Runtime Environment چندین کتابخانه ادغام شده و کلاس را برای کمک به توسعه‌دهندگان در ایجاد ارتباط یکپارچه بین داده های برنامه‌ها و سرویس‌ها، فراهم می‌کند. برخی از این کتابخانه ها عبارت اند از : 

1. Java IDL: از معماری Common Object Request Broker Architecture یا به اختصار (CORBA) برای پشتیبانی از اشیاء توزیع شده که به زبان جاوا نوشته شده اند، استفاده می کند. این معماری، استانداردی می باشد که توسط گروه مدیریت اشیاء (OMG) تعریف شده است. CORBA بخش های نرم افزاری که با زبان های برنامه نویسی مختلف نوشته شده اند و روی چندین کامپیوتر اجرا می شوند را قادر می سازد تا با یکدیگر کار کنند. CORBA استانداردی برای توزیع اشیاء در سراسر شبکه است به طوری که عملیات روی آن اشیاء را بتوان از راه دور انجام داد. CORBA با یک زبان برنامه نویسی خاص مرتبط نیست و هر زبانی با پیوند به آن، می تواند برای فراخوانی و پیاده سازی اشیاء استفاده شود. 

2. Java Database Connectivity (JDBC) API: مجموعه ای از ابزارها را برای توسعه دهندگانی که می خواهند در برنامه خود به صورت remote با دیتابیس ارتباط داشته باشند یا داده ای را در flat file ها (مجموعه ای از داده های ذخیره شده در یک پایگاه داده دو بعدی است که در آن رشته های مشابه و در عین حال مجزا از نظر اطلاعات، به عنوان رکورد در یک جدول ذخیره می شوند) و spreadsheet ها (فایل هایی با مجموعه ای از ستون ها و ردیف ها که یک رکورد در هر خط خود دارند) ذخیره کنند.

یادگیری جاوا و تفاوت JVM ، JRE و JDK در جاوا چیست

تصویر (2)

3. Java Naming and Directory Interface (JNDI): یک رابط برنامه نویسی و directory service (به سیستمی گفته می شود که در یک شبکه، نام ها را به آدرس های مرتبط متصل می نماید) است که به مشتریان امکان ایجاد برنامه های قابل حمل را می دهد به نحوی که این برنامه ها بتوانند اطلاعات را با استفاده از قوانین نامگذاری (مجموعه قوانینی که برای نام گذاری استفاده می شود)، از پایگاه های داده واکشی کنند.

تفاوت JVM ، JRE و JDK در توسعه برنامه تحت زبان جاوا

تصویر (3)

  • کتابخانه های زبان و ابزارها: JRE خود شامل پکیج های Java.lang و Java.util می شود که برای طراحی، ارائه نسخه های مختلف، مدیریت و نظارت بر برنامه های جاوا هستند. برخی از این پکیج ها عبارتند از:

1. Collections framework: یک معماری یکپارچه، متشکل از مجموعه ای از رابط ها که برای بهبود ذخیره سازی و فرآیند پردازش داده های برنامه، طراحی شده است. در واقع Collections فریم ورکی می باشد که یک معماری برای ذخیره و دستکاری گروهی از اشیاء ارائه می دهد. Collection های جاوا می‌توانند به تمام عملیات‌هایی که روی یک داده انجام می‌دهید، مانند جستجو، مرتب‌سازی، درج، دستکاری و حذف، دسترسی داشته باشند.

تفاوت JVM ، JRE و JDK در جاوا جهت توسعه و پیاده سازی اپلیکیشن های مبتنی بر Java

تصویر (4)

2. Concurrency utilities: یک framework قدرتمند شامل ابزارهای threading با کارایی بالا می باشد. Concurrency utilities یک مدل برنامه نویسی غیرهمزمان است که به شما امکان می دهد وظایف را به صورت موازی اجرا کنید.

3. Preferences API: یک API چند پلتفرمی و سریع است که امکان اعمال تنظیمات گروهی روی برنامه های مختلف در یک سیستم واحد را برای چندین کاربر فراهم می کند.

4. Logging: این بخش گزارش خطاهای امنیتی، خطاهای به وجود آمده در پیکربندی و مشکلات عملکردی نرم افزار را ثبت می نماید.

5. Java Archive یا (JAR): یک فرمت فایل مستقل از پلتفرم است که امکان ذخیره شدن چندین فایل در قالب یک فایل JAR را فراهم می کند و با توجه به کاهش حجم فایل، سرعت دانلود را به میزان قابل توجهی افزایش می دهد.

Java Development Kit یا (JDK) چیست؟

Java Development Kit یا JDK یک کیت توسعه نرم افزار است که اغلب به آن superset of JRE می گویند. این مولفه اساسی، توسعه برنامه و Applet های جاوا (نوع خاصی از برنامه که در صفحه وب برای تولید محتوای پویا بکار می رود. Applet در مرورگر و سمت مشتری اجرا می شود) را ممکن می سازد. با توجه به تفاوت JVM ،JRE و JDK در جاوا، این کیت توسعه نرم افزار برای هر سیستم عامل به صورت اختصاصی ارائه شده، بنابراین به فایل های نصبی جداگانه برای هر سیستم عامل (مانند مک، یونیکس و ویندوز) نیاز می باشد.

تفاوت JVM ، JRE و JDK در جاوا و الزامات کامپایل اپلیکیشن

تصویر (5)

نقش JDK در جاوا

JDK شامل تمام ابزارهای مورد نیاز برای کامپایل، خطایابی و اجرای برنامه ای می شود که با استفاده از پلتفرم جاوا توسعه یافته است. (برنامه های جاوا را می توان با استفاده از command line نیز اجرا کرد.)

اجزای JDK

با توجه به تفاوت JVM ،JRE و JDK در جاوا، این کیت توسعه نرم افزار شامل تمام ابزارها، فایل های اجرایی و باینری های مورد نیاز برای اجرای برنامه های جاوا می باشد و شامل JRE، یک کامپایلر، دیباگر، فشرده ساز و سایر ابزارهایی است که برای توسعه جاوا استفاده می شود.

مقایسه جاوا Standard Edition یا SE و جاوا Enterprise Edition یا EE

جاوا مترادف با Java Standard Edition یا(Java SE) یا Core Java است و هر سه تعبیر، به مشخصات اساسی جاوا اشاره دارند. از طرفی Java EE، 

API ها را ارائه می دهد و معمولاً برای اجرای برنامه های بزرگتر استفاده می شود.

  • Java SE زبان برنامه نویسی اصلی جاوا است. پلتفرم Java EE بر پایه پلتفرم SE ساخته شده که برای برنامه های کاربردی در مقیاس بزرگ استفاده می شود.
  • SE همه چیز، از جمله الگوهای اولیه و اشیاء زبان برنامه نویسی جاوا را تعریف می کند، از این رو تمام عملکردهای اصلی را ارائه می دهد. پلت فرم Java EE یک محیط API و اجرایی برای توسعه و اجرای برنامه های کاربردی در مقیاس بزرگ، فراهم می کند.
  • پلتفرم Java SE شامل یک ماشین مجازی، ابزارهای توسعه، فناوری‌های استقرار و سایر کتابخانه‌هایی می شود که معمولاً در جاوا استفاده می‌ گردند. Java EE نیز از Enterprise JavaBeans، Java Server Pages، Servlets تشکیل شده است.
  • SE هیچ کد جداگانه ای در لایه های مختلف ندارد، در حالی که EE یک سیستم چند لایه است و به برنامه کمک می کند تا قوی تر و ایمن تر باشد.

تفاوت JVM ، JRE و JDK در جاوا چیست و چگونه با هم کار می کنند

ابتدا می بایست با نحوه کار این سه جز در کنار یکدیگر آشنا شوید و سپس تفاوت JVM ،JRE و JDK در جاوا را بررسی کنید. نمودار موجود در تصویر (6)، تصویری از نحوه تطبیق JVM ،JRE و JDK در جاوا، ارائه می دهد.

تفاوت JVM ، JRE و JDK در جاوا و نحوه کامپایل برنامه تحت جاوا

تصویر (6)

اگر یک توپ بیسبال را به صورت تکه تکه شده تصور کنید که شامل سه جزء اصلی است:

  • هسته گرد
  • قسمت میانی از جنس نخ و پنبه
  • قسمت چرمی بیرونی

یک توپ، بدون هر یک از این سه لایه، عملکرد موردنظر را نخواهد داشت. تقریباً همانند این سه قسمت از توپ بیسبال، در مقایسه تفاوت JVM ،JRE و JDK در جاوا هر کدام عملکردهای منحصر به فردی دارند. بدون وجود هر یک از آنها، جاوا به درستی عمل نخواهد کرد.

تفاوت JVM ،JRE و JDK در جاوا: مقایسه ویژگی های کلیدی

  • JDK پلت فرم برنامه نویسی است، در حالی که JRE برای اجرا استفاده می شود.
  • JVM پایه یا قلب زبان برنامه نویسی جاوا است و تضمین می کند که کد نرم افزار نوشته شده با جاوا، platform-agnostic خواهد بود (روی هر ترکیبی از سیستم‌عامل‌ها و معماری پردازنده اجرا شود).
  • JVM در JDK و JRE گنجانده شده است و برنامه های جاوا بدون آن اجرا نمی شوند.

فناوری های مکمل

فناوری های مکمل زیادی وجود دارد که می توان از آنها برای تقویت JVM ،JRE یا JDK استفاده کرد. فناوری های زیر از پرکاربردترین آنها هستند:

  • Just-in-time Compiler یا (JIT) بخشی از JVM است و تبدیل بایت کد به کد ماشین را بهینه سازی می کند. JIT، بایت کدهای مشابه را برای کامپایل همزمان انتخاب می کند و زمان کلی بین ایجاد بایت کد تا کامپایل کد ماشین را کاهش می دهد.

تفاوت JVM ، JRE و JDK در جاوا و بررسی نحوه عملکرد آنها

تصویر (7)

  • Javac، یکی دیگر از ابزارهای مکمل، کامپایلری است که تعاریف کد های جاوا را می خواند و آنها را به بایت کدی که می تواند روی JVM اجرا شود ترجمه می کند.
  • Javadoc اسناد API را از کد منبع جاوا به HTML تبدیل می کند. این فناوری برای ایجاد اسناد استاندارد HTML مفید است.

JVM و container technology

ماشین مجازی جاوا (JVM) برای ایجاد ماشین های مجازی (Virtual Machine) استفاده می شود. ماشین‌های مجازی، سرورهایی هستند که به چندین برنامه اجازه می‌دهند تا بدون اینکه بر یکدیگر تأثیر بگذارند، روی یک سخت‌افزار فیزیکی با ساختار یکسان، اجرا شوند. این ویژگی امکان استفاده بهتر از منابع را فراهم می کند و می توان گفت استفاده از ماشین های مجازی بسیار آسان تر و مقرون به صرفه تر از زیرساخت های فیزیکی مجزا برای هر ماشین است. ماشین های مجازی به دلیل استقلالی که دارند به راحتی قابل حذف هستند و می توان فضای و منابع آنها را به سایر ماشین های مجازی اختصاص داد. هنگامی که به برنامه ای نیاز ندارید، می توانید به سادگی آن ماشین مجازی را از کار بیاندازید.

container ها یک سطح بالاتر هستند و هسته سیستم عامل را مجازی می کنند. عدم وجود سیستم عامل، باعث می شود که container ها حتی سبک تر، سریع تر و انعطاف پذیرتر از ماشین های مجازی باشند.

container ها واحدهای اجرایی نرم‌افزاری هستند که در آنها کدهای برنامه به همراه کتابخانه‌ها و وابستگی‌های آن، به روش‌های متداول بسته‌بندی می‌شوند تا بتوان آنها را در هر مکانی (چه روی دسکتاپ و چه فضای ابری) اجرا کرد.

برای انجام این کار، container ها از نوعی مجازی سازی سیستم عامل بهره می برند که در آن ویژگی های سیستم عامل برای جداسازی فرایندها و کنترل میزان CPU، حافظه و دیسکی که این فرآیندها به آنها دسترسی دارند، استفاده می شود.

کانتینرها، کوچک، سریع و قابل حمل هستند زیرا برخلاف ماشین مجازی، کانتینرها نیازی به داشتن سیستم عامل مجزا در هر نمونه ندارند و در عوض می توانند به سادگی از ویژگی ها و منابع سیستم عامل میزبان استفاده کنند.

جمع بندی:

در جدول زیر تفاوت های عمده بین JVM ،JRE و JDK در جاوا آمده است:

JDK

JRE

JVM

JDK یک کیت توسعه نرم افزار برای توسعه برنامه های کاربردی در جاوا است.

یک بسته نرم افزاری است که کتابخانه های کلاس جاوا را به همراه اجزای لازم، برای اجرای کد جاوا فراهم می کند.

JVM محیطی را برای اجرای "بایت کد" فراهم می کند.

JDK وابسته به پلتفرم است.

JRE نیز وابسته به پلتفرم است.

JVM به شدت به پلتفرم وابسته است.

شامل ابزارهایی برای توسعه، اشکال زدایی و نظارت بر کد جاوا است.

شامل کتابخانه های کلاس و سایر فایل های پشتیبانی است که JVM برای اجرای برنامه به آنها نیاز دارد.

ابزارهای توسعه نرم افزار در JVM گنجانده نشده است.

یک مجموعه بزرگ از JRE است

زیر مجموعه JDK است.

JVM زیر مجموعه ای از JRE است.

JDK به توسعه دهندگان این امکان را می دهد تا برنامه های جاوایی که می توانند توسط JRE و JVM اجرا شوند را ایجاد کنند.

JRE بخشی از جاوا است که JVM را ایجاد می کند.

یکی از اجزای پلتفرم جاوا است که کد منبع را اجرا می کند.

JDK همراه با یک installer یا نصب کننده است.

JRE فقط شامل محیطی برای اجرای کد منبع است.

JVM شامل نرم افزار JDK و JRE می شود.

جدول(1)

اشتراک گذاری:

نظرات

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *