JVM یک ماشین مجازی است. این یک ویژگی است که محیط زمان اجرا را فراهم می کند که در آن می توان بایت کد جاوا را اجرا کرد.

JVM ها برای بسیاری از سیستم عامل های سخت افزاری و نرم افزاری در دسترس هستند (یعنی JVM وابسته به پلتفرم است).

 

JVM چیست؟

مشخصاتی که در آن جاوا ماشین مجازی مشخص شده است. اما ارائه دهنده اجرا در انتخاب الگوریتم مستقل است. اجرای آن توسط اوراکل و سایر شرکت ها ارائه شده است.
پیاده سازی آن با نام JRE (Java Runtime Environment) شناخته می شود.
در هر زمان اجرا که دستور java را برای اجرای کلاس java در خط فرمان می نویسید ، نمونه ای از JVM ایجاد می شود.

 

JVM عملیات زیر را انجام می دهد:

کد را بارگذاری می کند
کد را تأیید می کند
کد را اجرا می کند
محیط اجرا را فراهم می کند

JVM تعاریف زیر را ارائه می دهد:

منطقه حافظه
فرمت فایل کلاس
مجموعه ثبت نام
انبار جمع آوری زباله
گزارش خطای مرگبار و غیره

 

معماری JVM

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

1) ClassLoader

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

Bootstrap ClassLoader: این اولین بارگیری کننده کلاس Extension classloader است. فایل rt.jar را که شامل همه فایلهای کلاس Java Standard Edition مانند کلاسهای بسته java.lang ، کلاسهای بسته java.net ، کلاسهای بسته java.util ، کلاسهای بسته java.io ، کلاسهای بسته java.sql و غیره است بارگیری می کند.
Extension ClassLoader: این فرزند کلاس لودر Bootstrap و کلاس بارگذار والد Systemloader کلاس است. فایلهای jar را که در فهرست راهنمای $ JAVA_HOME/jre/lib/ext قرار دارند بارگیری می کند.
System/Application ClassLoader: این کلاس لودر فرزند Extension classloader است. فایل کلاس را از classpath بارگذاری می کند. به طور پیش فرض ، classpath روی فهرست فعلی تنظیم شده است. با استفاده از کلید “-cp” یا “-classpath” می توانید مسیر کلاس را تغییر دهید. همچنین به عنوان Application classloader شناخته می شود.

 

2) Class(Method) Area

Class (Method) منطقه ساختارهای هر کلاس مانند مخزن ثابت زمان اجرا ، داده های فیلد و روش ، کد روش ها را ذخیره می کند.

 

3) Heap

این منطقه داده زمان اجرا است که اشیا در آن تخصیص داده شده است. (در واقع وقتی از یک آبجت new میکنیم در این فضا قرار میگیرد)

 

4) Stack

متغیرهای محلی و نتایج جزئی را در اختیار دارد و در فراخوانی و بازگشت روش نقش دارد.

هر موضوع دارای یک پشته JVM خصوصی است که همزمان با موضوع ایجاد می شود.

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

 

5) Program Counter Register

رجیستر PC (counter counter) حاوی آدرس دستورالعمل ماشین مجازی جاوا است که در حال اجرا است.

 

6) Native Method Stack

این شامل تمام روش های بومی است که در برنامه استفاده می شود.

 

7) Execution Engine

یک پردازنده مجازی
مفسر: جریان bytecode را میخواند و سپس دستورالعمل ها را اجرا میکند.
کامپایلر Just-In-Time (JIT): برای بهبود عملکرد استفاده می شود. JIT بخشهایی از کد بایت را که عملکردهای مشابهی دارند به طور همزمان کامپایل می کند و بنابراین زمان مورد نیاز برای کامپایل را کاهش می دهد. در اینجا ، عبارت “کامپایلر” به مترجمی از مجموعه دستورات ماشین مجازی جاوا (JVM) به مجموعه دستورالعمل CPU خاص اشاره دارد.

 

8) Java Native Interface

Java Native Interface (JNI) یک چارچوب است که رابطی را برای ارتباط با برنامه دیگری که به زبان دیگری مانند C ، C ++ ، Assembly و غیره نوشته شده است فراهم می کند. جاوا از چارچوب JNI برای ارسال خروجی به کنسول یا تعامل با کتابخانه های سیستم عامل استفاده می کند.