بایت کد و JVM - قسمت 5

بنام یگانه دولوپر عالم

توی این سری از مقالات قصد داریم که دل و روده زبان جاوا رو بکشیم بیرون و در مورد همه قابلیت های این لعنتی جذاب و همیشه ترند صحبت کنیم.

منبع این سلسله مقالات ، کتاب آقای هربرت شیلد هستش (لینک دانلود) که الحق ولانصاف که خفن تر و کامل ترش رو نداریم.

با ما همراه باشید (صفحه رو دنبال کنید) که قراره همه مطالبی که ایشون توی کتابشون مطرح کردند رو بطور کامل و به زبون کاملا ساده کوچه بازاری بیان کنیم.




بایت کد ، جادوی جاوا

چیزی که باعث شد که جاوا بطور همزمان پاسخگوی امنیت و قابلیت حمل پذیری برنامه ها باشد ، این بود که کامپایلر جاوا بجای اینکه خروجی قابل اجرا ( executable ) بهمون بده ، خروجی از جنس بایت کد بهمون میده .

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

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

تبدیل شدن کد های جاوا به بایت کد ، از این جهت کار ما رو واسه portable بودن برنامه هامون ساده تر میکنه که دیگه نیازی نیست که بخوایم واسه هر پلتفرم و هر سیستمی یه برنامه جداگونه بنویسیم ، اینجا فقط کافیه که اون سیستم هدف ، JVM مخصوص به خودش رو نصب داشته باشه ، که بطور معمول بطور پیشفرض رو همه پلتفرم های امروزی نصب هستش.

امنیت با sandbox

یکی دیگه از چالش هایی که داشتیم امنیت بودش که همین اجرا شدن برنامه ها با واسطه گری JVM باعث میشه که روند اجرا شدن نرم افازر های مختلف تحت کنترل باشه ، JVM یه محیط محدود وکنترل شده بنام sandbox رو برای اجرا شدن در اختیار برنامه ها قرار میده که توی این محیط دسترسی های حساس اپلیکیشن ها رو محدود میکنه و دیگه نمیتونن هر بلابی که دلشون میخواد رو سر سیستم کاربر بیارن و این مدلی ، امنیت کاربرای گوگولی مگولی فضای اینترنت هم تامین میشه.


به یاد گذشتگان ، JIT Compiler

جاوا به عنوان یه زبان مفسری شناخته میشه ولی اصلا خودش رو به این مورد محدود نمیکنه توی یه سری موارد به زبان نیتیو پلتفرم هدفش تبدیل میکنه و میزنه توی جاده اجرای کامپایلری که اینکارش باعث افزایش پرفورمنس وسرعت و نیاز کمتر به منابع سیستمی در زمان اجرا میشه.

برای این منظور ، تکنولوژی ارایه شد بنام HotSpot که قابلیت JIT Compiling رو واسه بایت کد های جاوا فراهم میکرد . JIT Compiler ، بخشی از JVM هست که باعث میشه قسمت های تکراری برنامه ، بجای اینکه در هربار اجرا بخان از اول تفسیر بشن ، یکبار بطور کامل کامپایل بشن ( مستقیما به کد ماشین تبدیل بشن) و هربار که بهشون نیاز داشتیم ، مستقیما اجرا بشن ، البته اینطور هم نیست که کل برنامه قرار باشه تبدیل به فایل اجرایی بشه هاا ، نه - فقط اون بخش هایی که بطور مکرر بهشون نیاز پیدا میکنیم.

مدل های مختلف کامپایلر رو هم توی نسخه های مختلف جاوا داشتیم مثل ahead-of-time compiler که اگه خودتون دوست داشتید در موردش مطالعه کنید یا بگید که خودم در موردشون مفصل بنویسم واستون.



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




30 - خردادماه - 1403

پایان قسمت پنجم

قسمت قبلی

قسمت بعدی