معرفی ماشین مجازی جاوا
مقاله

ماشین مجازی جاوا (Java Virtual Machine): مفاهیم پایه

ماشین مجازی (Virtual Machine) که در سیستم عاملی دیگر قرار گرفته و امکان اجرای کد های جاوا را فراهم می سازد، ماشین مجازی جاوا یا Java Virtual Machine نام دارد. این موضوع به مانند یک سیستم دیجیتالی است که داخل سیستم عامل بزرگتری فعالیت میکند.

تعریف ماشین مجازی جاوا

تصویر(1)

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

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

JVM یک نرم افزار است که Java bytecode را ترجمه کرده و محیطی را برای اجرای آن کد فراهم می سازد. علاوه بر این، اجرای کد جاوا، جدا از محیط سیستم عامل بوده و شعار "یک بار کد بنویسید، در هر محیطی اجرا کنید" را عملی می سازد. در واقع، یکی از مزایای زبان جاوا، وجود JVM است که امکان اجرای کد های نوشته شده به زبان جاوا در هر سیستم عاملی را فراهم می سازد.

مزایای استفاده از ماشین مجازی جاوا

تصویر(2)

ماشین مجازی جاوا یکی از پر استفاده ترین ابزارها است که توسط توسعه دهندگان شرکت جاوا و متخصصین جامعه متن باز پشتیبانی و نگهداری می شود. تصمیم شرکت Sun Microsystems جهت متن باز نمودن زبان جاوا، باعث خلق OpenJDK شد. حجم بالای استفاده توسعه دهندگان اوراکل (Oracle) از OpenJDK، باعث پشتیبانی مداوم از آن شده است.

چه مواقعی از ماشین مجازی جاوا استفاده می شود؟

به صورت کلی دو هدف اصلی از سوی JVM دنبال می شود:

1- ابزاری جهت اجرای نرم افزار هایی جاوا فراهم گردد.

2- امکان نگهداری و بهینه سازی حافظه برنامه نوشته شده با جاوا فراهم شود. 

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

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

  • تعریف فنی: JVM شامل خصوصیاتی است که محیط را برای اجرای یک برنامه نرم افزاری نوشته شده به زبان جاوا، فراهم می سازد.
  • تعریف غیر فنی: JVM نرم افزارهای نوشته شده به زبان جاوا را اجرا نموده و تنظیماتی برای مدیریت منابع در زمان اجرای آن برنامه را به همراه دارد.

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

مدیریت حافظه و Garbage Collection

مرسوم ترین تعاملاتی که با JVM انجام می شود، نظارت بر "صف و پشته" جهت تغییر تنظیمات استفاده از حافظه (Memory) و مدیریت آن است. حافظه JVM توسط عملیات Garbage Collection مدیریت می گردد. این روش در تضاد با مدیریت منابع زبان های برنامه نویسی قبل از جاوا است. در گذشته مدیریت کردن حافظه بر عهده توسعه دهنده بود.

نحوه فعالیت ماشین مجازی جاوا

تصویر(3)

Garbage Collection به فرایندی گفته می شود که در آن حافظه مورد استفاده نرم افزار ها به صورت مداوم بررسی می شود. در این بررسی اگر میزانی از حافظه بلااستفاده تشخیص داده شود، آن بخش حذف و آزاد خواهد شد. این فرایند نیز داخل JVM اجرا و مدیریت می گردد. garbage collection توسط مشخصات ارائه شده از سوی توسعه دهنده و سیستم عامل میزبان، این فرایند را برای هر نرم افزار جاوا به صورت جداگانه مدیریت می نماید.

جاوا یک زبان برنامه نویسی سطح پایین یا "close to the metal" نیست

زبان های برنامه نویسی مانند C و ++C که پیش از جاوا ارائه شده اند، اصطلاحا "close to the metal" نامیده می شوند و سرعت اجرای بالایی دارند. علاوه بر این، زبان های برنامه نویسی نام برده شده امکان مدیریت مستقیم حافظه را دارند. در حالی که جاوا این قابلیت را ندارد. جاوا، عمل مدیریت حافظه را به JVM می سپارد. این محدود سازی برنامه نویسان در مدیریت حافظه، در ابتدا مورد انتقاد بسیاری قرار گرفت. از این روی، تیم توسعه جاوا تلاش فراوانی برای بهبود فرایند garbage collection و مدیریت حافظه انجام داد. در خلال ارائه پشتیبانی مداوم و توسعه زبان جاوا، فرایند مدیریت حافظه نیز بسیار بهبود داشته است و چشم انداز مثبتی برای آن دیده می شود. ماشین مجازی جاوا از Just-In-Time compiler استفاده می کند. این کامپایلر وظیفه تبدیل bytecode به کد ماشین جهت اجرا در محیط سیستم عامل را بر عهده دارد. همین عمل نیز موجب افزایش سرعت اجرای کد در محیط JVM می شود.

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

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

تصویر(4)

برای درک بهتر ماشین مجازی جاوا، باید نحوه عملکرد و معماری بکار رفته در آن را مرور نمود.

JVM شامل موارد زیر می شود:

  1. Classloader

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

  1. Method Area

در معماری ماشین مجازی جاوا به بخشی که از ساختار کلاس های گوناگون برای اجرای برنامه های جاوا استفاده می کند، method area گفته می شود.

  1. Heap

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

  1. JVM Language Stacks

این بخش وظیفه ذخیره سازی محلی متغیرها را دارد و حاوی قسمتی از نتایج اجرا نیز می باشد. هر Thread دارای stack منحصر به فرد خود است، در واقع stack ها به همراه Thread ها ایجاد می گردند. زمانی که method invocation (فرایند فراخوانی کلاس ها و متغیر های مرجع) آغاز می شود، Thread ها و Stack های جدیدی ایجاد شده و با حذف method invocation، آن Thread ها و Stack ها نیز حذف می گردند.

  1. PC Registers

آدرس ماشین مجازی جاوا که در حال اجرای دستورات است، در PC register نگهداری می شود. در زبان برنامه نویسی جاوا، هر Thread دارای PC register اختصاصی خود است.

  1. Native Method Stacks

این بخش با اتکا به کتابخانه محلی زبان های برنامه نویسی دیگر(غیر از جاوا)، وظیفه نگهداری دستورالعمل های مرتبط با کد های نوشته شده به همان زبان های برنامه نویسی را بر عهده دارد. 

  1. Execution Engine

از Execution Engine جهت تست و بررسی سخت افزار، نرم افزار و تمام سیستم استفاده می شود. Execution Engine این عملیات را بدون حفظ هیچگونه اطلاعات از محصول آزمایش شده، انجام می دهد.

  1. Native Methods Interface

چارچوب برنامه نویسی Native Methods Interface اجازه دسترسی برنامه جاوا در حال اجرا در JVM را به کتابخانه ها و دیگر نرم افزار های موجود در سیستم محلی، فراهم می سازد.

  1. Native Methods Libraries

این کتابخانه مرجعی متشکل از کتاب خانه های محلی نوشته شده به دیگر زبان ها مانند C است که توسط Execution Engine استفاده می گردند.

جمع بندی 

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

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

نظرات

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

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