ماشین مجازی جاوا چیست

در مقاله امروز آموزشگاه کامپیوتر پرتو،  قصد بررسی کنیم که ماشین مجازی جاوا چیست . معنی ماشین مجازی جاوا یا Java Virtual Machine یا به اختصار JVM را داریم .جالب است بدانید که تحقق شعار جاوا بدون بکارگیری ماشین مجازی جاوا محقق نخواهد شد.
شعار جاوا این بود که Write One ,Run Anywhere! .بدین معنی که برنامه را یکبار بنویس و سپس در هر پلتفرمی که خواستید اجرا نمایید.این قابلیت صرفا با بکار گیری JVM فراهم خواهد شد.بنابراین برنامه هایی که در جاوا نوشته میشوند برنامه هایی چند پلتفرمی هستند.

ماشین مجازی جاوا چیست

ماشین مجازی جاوا چیست

ماشین مجازی در هر سیستم عاملی وجود دارد .ماشین مجازی در واقع یک نرم افزار پیاده سازی شده است.
بنابراین این امکان برای توسعه دهندگان وجود دارد که ماشین مجازی جاوا را بصورت مجزا ایجاد نمایند.بعنوان مثال Dalvic VM یک ماشین مجازی مخصوص سیستم عامل اندروید است.این سیستم عامل توسط گوگل نوشته شده است.
در حقیقت میتوان گفت ماشین مجازی جاوا دو هدف اصلی را بر عهده دارد ;
1. فراهم نمودن محیطی برای اجرای برنامه های جاوا بر روی هر سیستم با هر سیستم عامل
2. مدیریت و بهینه سازی منابع حافظه سیستم در زمان اجرای برنامه جاوا

ماشین مجازی جاوا

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

و اما عملیاتی که توسط ماشین مجازی جاوا انجام میشود شامل چه مواردی است؟
• بارگذاری کد ها
• بررسی صحت و درستی کدها
• اجرای کدها
• فراهم نمودن مجیط اجرای برنامه

ماشین مجازی جاوا اختیاراتی دارد که از آن جمله میتوان به تعیین موارد زیر اشاره نمود:
• Memory area یا ناحیه ای از حافظه heap که کلیه داده ها من جمله آرایه ها و آبجکت ها در حین اجرا درون آن ذخیره میشوند.
• فرمت Class file ; این فایل با فرمت class. ذخیره میشود و حاوی بایت کدهای جاوا است.
• حافظه ی heap که آبجکت های بلااستفاده جمع آوری شده با garbage collection در آن نگه داری می شوند.
• خطاهای مهلک را گزارش میکند.

توسعه دهندگان جاوا چه کسانی هستند

بیایید در این مقاله در آموزشگاه کامپیوتر ، با آنان آشنا شویم.
توسعه دهندگان جاوا در سراسر دنیا بصورت سازمانی و یا بصورت متن باز آن را توسعه میدهند.به عنوان مثال پروژه OpenJDK محصول تصمیم سازان مایکروسیستم برای منتشر نمودن جاوا بشکل اوپن سورس است.

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

معماری داخلی JVM

معماری داخلی ماشین مجازی جاوا عبارت است از بخش هایی نظیر : classloader، memory area، execution engine و … که در ادامه به بررسی آن ها خواهیم پرداخت.برای درک بهتر این موضوع که ماشین مجازی جاوا چیست ، بهتر است با ساختار داخلی آن آشنا شویم.

معماری داخلی JVM

Classloader

Classloader زیر سامانه برنامه ماشین مجازی است و کلاس فایل هایی که حاوی کد بایت های جاوا هستند و را در ناحیه ای بنام runtime data area یا مکان داده های زمان اجرا ذخیره مینماید.

Class (Method) Area / ناحیه ی ذخیره ی اطلاعات کلاس
ناحیه ای برای ذخیره ساختارهای اختصاصی نظیر مجموعه ثوابت زمان اجرا ،فیلدها ،داده ها و کدهای مربوط به متد ها

HEAP
ناحیه ای است در حافظه که تمامی آبجکت ها در زمان اجرا در آن ذخیره می شوند.

Program Counter Register (شمارنده ی برنامه)
حافظه ای در پردازنده سیستم با دسترسی سریع و آسان که آدرس دستوری از برنامه JVM که در زمان اجرا مورد مصرف قرار گرفته را در خود نگه میدارد.

Stack (پشته)
پشته ناحیه ای است در حافظه که فریم ها را در خود ذخیره میکند.پشته ها به ناحیه ای از حافظه از حافظه گفته میشود که داده ها را بصورت ایستا و در زمان کامپایل درون خود ذخیره میکند.پشته ها نتایج جزئی و متغیرهای محلی را نگهداری و در زمان فراخوانیمتد ها و بازگردانی خروجی آن از متد ،نقش دارد.با هر بار فراخوانی متد یک فریم جدید ساخته شده و زمانی که فراخوانی متد پایان یافت Frame مربوطه حذف میگردد.
Native method stack (حافظه پشته حامل متدهای native)
حاوی تمامی متدهای native که در اپلیکیشن بکار رفته اند، است.

برای یادگیری این زبان و این ساختار می توانید در کلاس آموزش اندروید در آکادمی پرتو ، شرکت نمایید

Execution Engine (موتور اجرا کننده)
موتور اجرا کننده شامل سه بخش است که عبارتند از :
• یک پردازنده مجازی : یک cpu فیزیکی که به دستگاه مجازی تخصیص داده شده است.
• مفسر : وظیفه خواندن زبان میانی و تبدیل آن به بایت کد را بر عهده دارد.پس از خواندن دستورات آن را اجرا میکند.
• ترجمه و کامپایل در لحظه JIT : این واحد به جهت افزایش سرعت و بالا بردن کارایی نقش دارد .JLT بخش هایی از بایت کدها که کارایی و قابلیت های یکسانی دارند را بطور همزمان ترجمه کرده و بدین صورت زمان مورد نیاز برای کامپایل کدهای بسیاری را کاهش میدهد. لازم به ذکر است که در اینجا منظور از کامپایلر، مترجمی است که مجموعه دستورات jvm را به کد یا دستورات قابل فهم برای پردازنده/cpu دستگاه میزبان تبدیل می کند.ما در بهترین آموزشگاه برنامه نویسی ، در کنار شما هستیم.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید ؟
در گفتگو ها شرکت کنید!

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

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