• Java Native Interface: این اینترفیس برای تعامل با متد‌های native هستش. JVM با JNI متدهای native رو صدا میزنه و بیشتر برای ارتباط با سخت افزار ازش استفاده می‌کنه.
  • Native Method Libraries: یک مجموعه از کتابخانه های native هستن که Execution Engine به اونها برای دسترسی به JNI نیاز داره.
  • JVM Threads: ما در مورد اینکه برنامه‌ها چجوری اجرا می‌شن صحبت کردیم ولی درباره اجرا کننده برنامه‌ها هیچ صحبتی نکردیم.
  • JVM همزمان چندین thread را اجرا می‌کند. بعضی از اونها منطق یک برنامه هستن و به وسیله برنامه‌ها ساخته می‌شن که بهشون می‌گن Application thread و باقی thread ها رو خود JVM برای کارهای خودش ایجاد می‌کنه که بهشون می‌گن System thread.
  • به thread اصلی برنامه Main thread می‌گیم و تمام thread های برنامه به وسیله main thread ساخته می‌شن. اجرای برنامه، ساخت اشیا توی heap و … وظیفه application thread هستش.
  • system thread از قسمت‌های زیر تشکیل شده:
  • Compiler threads: کامپایل bytecode به native code در زمان اجرا رو این thread انجام می‌ده.
  • GC threads: تمام کارهایی که GC انجام می‌ده رو این thread انجام می‌ده.
  • Periodic task thread: رخدادهای وابسته به زمان و کارهایی که به صورت دوره ای انجام میشه رو این thread انجام می‌ده.
  • Signal dispatcher thread: دریافت سیگنال‌هایی که به JVM ارسال می‌شه، مدیریت و پردازش اونها در درون JVM با فراخوانی متد مناسب در JVM
  • VM thread: بعضی کارها به JVM نیاز دارن تا اونها رو به یک نقطه درست از Heap برسونه، جایی که تغییرات زیاد نیست. مثلا: stop-the-world garbage collections یا thread stack dumps یا thread suspension ویا biased locking revocation. این دسته از عملیات‌ها برای اجرا به این thread نیاز دارند.

نکات پایانی:

  • جاوا یک زبان مفسری و کامپایلری هستش
  • طراحی جاوا جوری هستش که در پیوند‌های پویا (dynamic linking) و تفسیر در زمان اجرا (run-time interpreting) کند هستش.
  • کامپایلر JIT نقطه ضعف جاوا رو در تفسیر کدها رو با cache کردن کد‌های کامپایل شده بجای bytecode پوشش می‌ده
  • JVM فقط یک سند هستش، ارائه دهنده های اون می‌تونن چیزی رو تغییر بدن، نوآوری داشته باشن و یا در زمان پیاده سازی چیزی رو بهبود ببخشن.