ارتقای کارایی از JDK ۶ تا JDK ۹

انتشار اولیه نسخه جدید JDK، نسخه ۹ آن، شامل یک بهبود در JDK به نام JEP 143, Improve contended locking میباشد که کارایی مانیتورهای به رقابت گذاشته شده را ارتقا میدهد. اما این مساله چقدر صحت دارد.
مانیتورها توسط عبارتهای synchronized برای قفل کردن دسترسی به یک بلوک از کد استفاده میشوند.اگر بلوک synchronized توسط چندین ریسه فراخوانی شود، مانیتور به رقابت گذاشته میشود. این مساله میتواند به طرز قابل توجهی کارایی را کاهش دهد. بنابراین بیایید بهبود کارایی مانیتورهای به رقابت گذاشته شده را بررسی کنیم.
این نمودار زمان یک فراخوانی تابع را نشان میدهد. عدد کمتر به معنی کارایی بهتر است. این آزمون شامل ۸ ریسه است که به یک بلوک synchronized و به یک مانیتور یکسان دسترسی دارند. شما هم میتوانید از اینجا دانلود و تست کنید. این تست روی intel i5 و پردازنده ۴ هستهای انجام گرفته است. همانطور که میبینید، JDK ۹ کارایی مانیتورهای مورد رقابت را افزایش میدهد. حال به یک مقایسه مستقیم بین JDK ۸ و JDK 9 نگاه میکنیم.
مقایسه JDK 8 و JDK 9
این نمودار میزان بهبودی که با سوئیچ از JDK 8 به JDK 9 به دست میآید را نشان میدهد.
نمودار زمان فراخوانی یک تابع را برای یک مانیتور مورد رقابت توسط ریسههای مختلف نشان میدهد. همانطور که مشاهده میشود کارایی JDK ۹ خیلی کندتر از JDK 8 کاهش پیدا میکند.
یک پیشنهاد برای ارتقای کارایی استفاده از قفلهای بازگشتی به جای بلوک synchronized است. بیایید ببینیم آیا این توصیه برای جاوا۹ هم درست است.
قفلهای بازگشتی در مقابل Synchronized
در این نمودار کارایی قفل بازگشتی مورد رقابت را با یک مانیتور مورد رقابت برای یک بلوک synchronized مقایسه میکنیم:
این نمودارها زمان یک فراخوانی تابع را در ریسههای مختلف نشان میدهد. همانطور که در JDK 9 مشاهده میشود، کارایی عبارت synchronized به سریعی قفلهای بازگشتی است.
نتیجه گیری
همانطور که مشاهده کردیم، JDK 9 کارایی مانیتورهای مورد رقابت را افزایش داده است. در JDK 9 مانیتورهای مورد رقابت به اندازه قفلهای بازگشتی سریع هستند. اما JDK 9 یک طرح بهبود JEP 285, Spin-Wait Hints دارد که کارایی قفلها را بهبود میبخشد.
منبع: