ماشین مجازی
تاریخچه

ماشین مجازی سیستمی و ماشین مجازی فرایند به دههٔ ۶۰ میلادی بازمی‌گردند و همچنان درحال توسعه می‌باشند.
ماشین‌های مجازی سیستمی از سیستم‌های اشتراک زمانی ایجاد شدند به ویژه که این سیستم‌ها در سیستم اشتراک زمانی سازگار یا CTSS پیاده‌سازی شدند. اشتراک زمانی به کاربرها این اجازه را می‌دهد که از یک کامپیوتر به صورت همزمان استفاده کنند به طوری که به نظر می‌رسد هر برنامه دسترسی کامل به ماشین دارد اما در حقیقت تنها یک برنامه در یک لحظه در حال اجرا می‌باشد به صورتی که سیستم در فاصله‌های زمانی بین برنامه‌ها تعویض انجام می‌دهد که هر بار باعث صرفه جویی و بازیابی حالت می‌شود. این مطلب در قالب ماشین‌های مجازی تکامل یافت به خصوص به وسیلهٔ سیستم‌های تحقیقاتی شرکت IBM مانند سیستم M44/44X که از مجازی سازی جزئی استفاده می‌کرد و CP_40 و SIMMON که از مجازی سازی کامل استفاده می‌کردند و نمونه‌های اولیهٔ هایپروایزرها بودند. اولین معماری ماشین مجازی که به‌طور گسترده در دسترس قرار گرفت CP-67/CMS بود (برای دسترسی به اطلاعات بیشتر به تاریخچه‌ی CP/CMS رجوع کنید). یک تمایز مهم بین استفاده از چند ماشین مجازی بر روی یک سیستم میزبان برای اشتراک زمانی مثلاً در M44/44X و CP_40 و استفاده از یک ماشین مجازی بر روی یک سیستم میزبان برای نمونه سازی مثلاً در SIMMON وجود داشت. برابرسازها که وظیفهٔ شبیه‌سازی سخت‌افزار سیستم‌های قبلی برای سازگاری را دارند به مانند System/360 IBM در سال ۱۹۶۳ بوجود آمدند. این در حالی است که شبیه‌سازی نرم‌افزار (که آن زمان به نام "simulation" شناخته می‌شد) به قبل از آن بازمی‌گردد.
ماشین‌های مجازی فرایند در ابتدا به عنوان زمینه‌های انتزاعی برای یک زبان میانی استفاده شده به عنوان نمایش میانی یک برنامه به وسیلهٔ یک کامپایلر به وجود آمدند که نمونه‌های اولیه آن به سال ۱۹۶۶ بازمی‌گردند. یک نمونهٔ اولیه در سال ۱۹۶۶ ماشین O_code بود که یک ماشین مجازی است که O_code (کد شئ) خارج شده از جلوبندی کامپایلر بی سی پی ال را اجرا می‌کند. این انتزاعی سازی این اجازه را به کامپایلر می‌داد که به راحتی به یک معماری جدید انتقال یابد و این کار به وسیلهٔ پیاده‌سازی یک عقب بندی جدید که کد شئ موجود را تبدیل به کد ماشین برای ماشین فیزیکی فعلی می‌کرد، انجام می‌شد. زبان اویلر از یک طراحی مشابه برخوردار است و زبان میانی آن P می‌باشد. این مطلب درحدود سال ۱۹۷۰ به وسیلهٔ پاسکال (زبان برنامه‌نویسی) عمومیت یافت به خصوص در سیستم پاسکال_پی (۱۹۷۳) و کامپایلر پاسکال_اس (۱۹۷۵) که در آن‌ها پی_کد نامیده شد و ماشین حاصل ماشین پی_کد نامیده شد. این مطلب تأثیر گذار بوده‌است و ماشین‌های مجازی از این نظر به‌طور کلی ماشین پی_کد خوانده می‌شوند. پی_کد پاسکال علاوه بر یک زبان میانی بودن، به صورت مستقیم به وسیلهٔ یک مفسر که ماشین مجازی را پیاده‌سازی می‌کند، اجرا می‌شود به خصوص در پاسکال UCSD (1978). این مطلب مفسرهای بعدی به خصوص ماشین مجازی جاوا را تحت تأثیر قرار داد. یک مثال ابتدایی دیگر SNOBLO4 (1967) می‌باشد که به زبان پیاده‌سازی اسنوبول نوشته شده‌است. SNOBLO4 یک زبان اسمبلی برای یک ماشین مجازی است و پس از آن ماشین‌های فیزیکی را با ترنسپایل کردن اسمبلر محلی به وسیلهٔ اسمبلرهای سطح-بالا مورد هدف قرار داد. با این وجود از آن زمان اسمبلرهای سطح_بالا از رده خارج شده‌اند در نتیجه این روش کمتر تأثیرگذار بوده‌است. ماشین‌های مجازی فرایند، رویکردی محبوب برای پیاده‌سازی نرم‌افزارهای میکرو کامپیوترهای اولیه مانند تاینی بیسیک و بازی‌های ماجراجویی بودند و از پیاده‌سازی‌های یکباره مانند Pyramid 2000 گرفته تا یک موتور همه منظوره مانند z-machine شرکت Infocom که به گفتهٔ گراهام نلسون "شاید بیشترین میزان قابل حمل بودن برای یک ماشین مجازی " را داراست را پیاده‌سازی می‌کردند.
پیشرفت‌های قابل توجهی در پیاده‌سازی اسمال تاک – ۸۰ رخ داد به خصوص پیاده‌سازی دویچ/شیفمان که کامپایل در جا را به عنوان رویکرد پیاده‌سازی که از ماشین مجازی فرایند استفاده می‌کند، به جلو راند. از دیگر ماشین‌های مجازی قابل توجه اسمال تاک می‌توان VisualWorks, Strongtalk و Squeak را نام برد. زبان مرتبط دیگری که نوآوری‌های بسیاری را در زمینهٔ ماشین‌های مجازی ایجاد کرد زبان برنامه‌نویسی سلف می‌باشد که بهینه‌سازی تطبیقی و جمع‌آوری زباله‌های نسلی را پایه‌گذاری کرد. این تکنیک‌ها از نظر تجاری مثلاً در ماشین مجازی جاوای هات اسپات (سال ۱۹۹۹) موفق بودند. نوآوری‌های دیگر شامل استفاده از ماشین مجازی مبتنی بر ثبات برای تطابق بهتر با سخت‌افزار اصلی، به جای استفاده از ماشین مجازی مبتنی بر پشته که تطابق نزدیک تری با زبان برنامه‌نویسی دارد، می‌باشد؛ این مطلب در سال ۱۹۹۵ به وسیلهٔ ماشین مجازی دیس برای زبان برنامه‌نویسی لیمبو پایه‌گذاری شد.OpenJ9 یک جایگزین برای ماشین مجازی جاوا HotSpot در OpenJDK می‌باشد و یک پروژهٔ منبع_باز اکلیپس می‌باشد که مدعی استارتاپ بهتر و استفاده از منابع کمتر در مقایسه با HotSpot می‌باشد.