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

بندانگشتی|400px|دیدکلی از معماری ماشین مجازی جاوا (جی‌وی‌اِم). کد منبع به بایت‌کد جاوا ترجمه می‌شود. هر سکویی که یک جی‌وی‌ام را اجرا می‌کند می‌تواند کد جاوا را اجرا کند. بایت‌کد اعتبارسنجی‌شده سپس به صورت مفسری یا ترجمهٔ جی‌ای‌تی بر روی معماری بومی انجام می‌شود. واسط برنامه‌نویسی جاوا و جی‌وی‌ام به صورت توأم محیط اجرایی را ایجاد می‌نماید
**ماشین مجازی جاوا**  که به صورت اختصار **JVM** مشخص می‌شود، مجموعه‌ای از برنامه‌های نرم‌افزاری و ساختمان‌داده‌هایی است که برای مدلسازی ماشینی مجازی اجرای برنامه‌های سایر رایانه‌ها و اسکریپت‌های دیگر سامانه‌هاُ به کار می‌رود. مدلی که **جی‌وی‌ام** برای اجرا می‌پذیرد، شکلی از زبان میانی را اجرا می‌نماید. به این زبان میانی جاوا بایت کد گفته می‌شود. این زبان میانی، به صورتی مفهومی، مجموعه‌ای از دستورهاِ زبان برنامه‌نویس مبتنی به پشته و معماری قابلیت مبتنی بر امنیت است. سان، ادعا نموده که هم اکنون، ۴٫۵ میلیارد دستگاه در جهان از جی‌وی‌ام استفاده می‌نماید.

## دید کلی
یک ماشین مجازی جاوا، علاوه بر جاوا، زبان‌های برنامه‌نویسی دیگری را هم پشتیبانی می‌نماید. برای مثال دستورها زبان برنامه‌نویسی ادا توانایی ترجمه به بایت کد و نیز اجرا در این ماشین مجازی را دارا هستند. علاوه بر شرکت سان (که شرکت توسعه دهندهٔ جاواست که البته این انحصار به شرکت اوراکل واگذار شده‌است)، سایر شرکت‌ها نیز ماشین‌های مجازی جاوایی را منتشر نموده‌اند؛ که البته این کار تحت ویژگی‌های منتشر شده توسط سان، صورت می‌پذیرد. همچنان‌که تمام حقوق تجاری آن تحت نام *جاوا* و متعلق به سان است.
جاوا، متبادر کنندهٔ مفهومی خاص است: **[[یکبار بنویس، همه‌جا اجرا کن]]**. این مفهوم توسط جی‌وی‌ام، پیاده‌سازی شده‌است. جی‌وی‌ام، محیطی برای اجرای برنامه‌های جاوا می‌باشد. این ماشین مجازی نرم‌افزاری است که در لایهٔ بالایی سخت‌افزار واقعی و سیتم‌عامل قرار می‌گیرد.
جی‌وی‌ام جزء حیاتی سکوی جاو است. جی‌وی‌ام، بر روی بسیاری از سخت‌افزارها و سکوهای نرم‌افزاری قابل نصب است. جاوا با استفاده از بایت کد یکسان برای تمام سکوها، ویژگی‌ای را معرفی می‌نماید با نام: یک بار ترجمه کن، هرجایی اجرا کن که مخالف با مفایر با یکبار بنویس، همه‌جا اجرا کن است. چراکه یکبار بنویس …، دربارهٔ زبان‌های ترجمه‌شوندهٔ چند سکویی است.

جی‌وی‌ام، به همراه مجموعه‌ای از کتابخانه‌های کلاسِ استاندارد توزیع می‌گردد. این کتابخانه‌ها رابط برنامه‌نویسی نرم‌افزار را پیاده‌سازی می‌نماید. یک رابط برنامه‌نویسی نرم‌افزار، توسط یک سامانهٔ رایانه‌ای، کتابخانه، یا برنامه برای تبادل داده بین آن‌ها فراهم می‌گردد. این رابط‌های برنامه‌ای، به صورت متناسب و با هم، در محیط زمانِ‌اجرای جاوا (JRE) به صورت یک بسته وجود دارد.

## محیط اجرایی
برنامه‌ایی که می‌خواهند بر روی جی‌وی‌ام، اجرا شوند، باید در قالبی استاندارد و کد دودویی (باینری) قابل حمل ترجمه شده‌باشند که به شکل نقطه‌کلاس (class.) است. یک برنامه ممکن است شامل تعداد زیادی کلاس در قالب فایل‌های مختلف باشد. برای توزیع ساده‌ترِ برنامه‌های با اندازهٔ بزرگ، معمولاً این برنامه‌ها را در فایل‌هایی با قالب .jar، (که کوته‌نوشت Java archive) ذخیره می‌گردد.
محیط اجرایی جی‌وی‌ام، فایل‌هایی با قالب `.class` یا `.jar` اجرا می‌نماید. این کار با استفاده از شبیه‌سازی مجموعه دستورها جی‌وی‌ام و با از تفسیر نمودن آن صورت می‌پذیرد. همچنین اجرای برنامه می‌تواند از طریق ترجمه همزمانِ هات‌اسپاتِ جاوا صورت پذیرد. ترجمه همزمانِ٬که در واقع تفسیر نیست، برای دستیابی به سرعت‌های بالاتر در نسخه‌های امروزی جی‌وی‌ام استفاده می‌گردد. البته برای آن دسته از توسعه‌گران، که برای سامانه‌های خاص، نیاز به کد بومی دارند، ترجمهٔ زودهنگام نیز برای جی‌وی‌ام وجود دارد.
مانند بسیاری از ماشین‌های مجازی، ماشین مجازی جاوا، دارای ساختاری مبتنی بر پشته که مبتنی بر ریزپردازنده/ریزکنترلگر اجرا کنندهٔ آن است .
وظیفهٔ جی‌وی‌ام به عنوان شیءای از محیط اجرای جاوا، اجرای برنامه‌های جاوا می‌باشد. بعد از اتمام اجرای برنامهٔ جاوا، این شیء به وسیلهٔ زباله روب، پالایش می‌شود. ترجمهٔ همزمان، به عنوان بخشی از ماشین مجازی جاوا به منظور افزایش سرعت اجراست. این روش ترجمه، با ترجمهٔ همزمان بخش‌هایی که عملکرد یکسانی را دارند و کاهش زمان لازم برای ترجمه، این افزایش سرعت را به ارمغان می‌آورد.

## زبان‌های جی‌وی‌ام

اگرچه جی‌وی‌ام در ابتدا تنها با هدف ترجمهٔ برنامه‌های جاوا پا به عرصه گذاشته بود، اما امروزه بسیاری از زبان‌های دیگر نیز قادر به اجرای برنامه‌های خود بر روی آن هستند.
جی‌وی‌امِ کنونی هیچ‌گونه پشتیبانی از زبان‌هایی که بررسی نوع در آن‌ها به صورت پویاست نمی‌کند، چرا که بررسی نوع موجود از نوع ایستاست.
با این وجود از جی‌وی‌ام می‌توان به عنوان مفسری برای زبان‌هایی با بررسی نوع پویا، استفاده نمود.
پشتیبانی از تغییر پویا در کلاس‌ها و متدها در جی‌وی‌ام به صورت محدود صورت می‌پذیرد که همان هم تحت محیط عیب‌یابی است. با این وجود کلاس‌ها و متدها را می‌توان به صورت پویا اضافه نمود. از هم‌اکنون طرحی برای پشتیبانی توکار از زبادهای پویا در نگارش هفتم جاوا در دست است.

## منابع

رده:ماشین مجازی جاوا
رده:پلت‌فرم جاوا
رده:جاوا (زبان برنامه‌نویسی)
رده:نرم‌افزارهای چندسکویی
رده:نرم‌افزارهای سکوی جاوا