ماشین مجازی Dalvik

از دانشنامه تخصصی فارسی اندروید
پرش به: ناوبری, جستجو

--RealUnknown ‏۱۵ ژوئیهٔ ۲۰۱۲، ساعت ۱۱:۲۹ (IRDT)

محتویات

ماشین مجازی Dalvik چیست ؟

1280218415.jpg

نرم افزار Dalvik یک ماشین پردازش مجازی در سیستم عامل اندروید می باشد. نرم افزاری است که برنامه های اندروید را روی گوشی اندرویدی اجرا می کند. Dalvik یک بخش جدای ناپذیر از اندروید است که معمولا در گوشی های موبایل یا تبلت ها مورد استفاده قرار می گیرد. برنامه ها معمولا به صورت جاوا نوشته می شوند و به بایت کد کامپایل می شوند. سپس آن ها از فایل های .class سازگار با ماشین مجازی جاوا به فایل های .dex سازگار با dalvik قبل از نصب روی گوشی تبدیل می شوند.

فرمت قابل اجرای dalvik طراحی شده است تا برای سیستم هایی که محدودیت پردازش و رم دارند، مناسب باشند.

dalvik یک نرم افزار متن باز می باشد. این برنامه توسط Dan Bornstein نوشته شده است. او این نام را از یک روستای ماهیگیری با همین نام در ایسلند گرفته است.

معماری

برخلاف Java VM ، که ماشین های توده ای هستند، Dalvik VM دارای یک معماری براساس ثبت است. ابزاری به اسم dx برای تبدیل بعضی از فایل های Java .class به .dex استفاده می شود. کلاس های چندگانه در یک فایل .dex ذخیره می شوند. بایت کد های جاوا نیز به یک دستورکار جایگزینی که توسط dalvik استفاده می شود، تبدیل می شوند. یک فایل غیر فشرده .dex معمولا چند درصد از یک فایل فشرده جاوا کم حجم تر است.

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

همان طور که می دانید در اندروید 2.2، dalvik یک کامپایلر لحظه ای دارد.


System-architecture.jpg


علاوه بر بهینه بودن برای احتیاج به رم کم، dalvik تعدادی مشخصه های ویژه ای دارد که آن را از سایر ماشین های مجازی دیگر متفاوت می کند:

  • VM محدود شده است که از فضای کمتری استفاده کند.
  • constant pool اصلاح شده است تا تنها از شاخص های 32-bit برای ساده سازی ترجمه استفاده کند.
  • ماشین مجازی استاندارد جاوا تنها دستورات توده ای 8-bit را اجرا می کند. متغییرهای محلی باید با دستورات مجزا انتقال یابند. در عوض dalvik دستورکار 16-bit مخصوص خود را دارد که مستقیما روی متغییرهای محلی کار می کند.

کارایی

عموما ماشین های توده ای باید از دستورات کار برای بارگذاری دیتا احتیاج دارند که در نتیجه در مقایسه با ماشین های براساس ثبت به دستورات بیشتری نیاز دارند. اما دستورات در یک ماشین براساس ثبت باید منبع و مقصد ثبت را کدگذاری کنند که باعث بزرگتر شدن آن ها می شود. این تفاوت ها برای مترجم ها بسیار مهم است. اما نتایج بنچمارک های جاوا غیرگرافیکی اوراکل نشان داد که اندروید 2.2 عموما 2 تا 3 برابر کندتر از سیستم های Java SE می باشد.

ماشین مجازی dalvik چگونه کار می کند؟

به عنوان بخشی از اندروید ، گوگل زمان زیادی را صرف تفکر در مورد بهینه کردن طراحی برای دستگاه ها کم قدرت کرده است. این دستگاه معمولا دچار لگ هستند. علاوه براین آن ها توان محدودی برای محاسبات دارند، ممکن است مقدار رم کل یک گوشی 64 مگابایت باشد و فضای در دسترس آن برای برنامه ها تنها حدود20 مگابایت باشد. احتیاج به کارایی در یک گوشی، شدید است و درنتیجه احتیاج دارد که طراحان گوشی همه چیز را بهینه کنند و بهبود ببخشند. اگر به لیست بسته ها در اندروید نگاهی بیاندازید، می بینید که آن ها قابلیت های زیادی دارند و همچنین بسیار گسترده هستند. براساس گوگل این فایل ها می توانند حدود 10 تا 20 مگابایت فضای رم را اشغال کنند.

این مشکلات باعث شد که گوگل در مورد قرار دادن JVM در بیشتر زمینه ها تجدید نظر کند. اولا ماشین مجازی dalvik فایل تولید شده جاوا را گرفته و آن ها را به یک یا چند فایل قابل اجرا توسط dalvik تبدیل می کند. آن از اطلاعات تکراری فایل های چندگانه .class مجددا استفاده می کند، به همین دلیل به طرز موثری فضای مورد نیاز را کاهش می دهد. دوما، گوگل به خوبی زباله روبی در ماشین مجازی dalvik را بهبود بخشیده است، اما در نسخه اولیه باید توسط کامپایلر JIT انتخاب به حذف می شدند. کدبیس 2 به نظر می رسد که منابع لازم برای کامپایلر JIT را دارد، اما در نسخه نهایی فعال نیست. پیش بینی شده است که در نسخه های آینده ارائه شود. شرکت می تواند این انتخاب را توجیه کند، زیرا بسیار از library های هسته اندروید، شامل lib های گرافیکی به صورت C یا C++ اجرا می شوند. متشابها، اندروید یک libraryاصلی بهینه شده براساس C را برای دسترسی به دیتابیس SQL فراهم می کند، اما این lib در یک API جاوا سطح بالا محصور شده است.

در اخر، ماشین مجازی dalvik از یک تولید کد مونتاژ متفاوت استفاده می کند که از ثبت به عنوان واحد اصلی ذخیره دیتا به جای توده ای استفاده می کند. گوگل امیدوار است که از این طریق 30% میزان دسورات را کاهش دهد. باید اشاره کنیم که شما نمی توانید به صورت مستقیم بایت کدهای جاوا را اجرا کنید، شما باید با فایل .class جاوا شروع کنید و آن ها را به فایل های .odex تبدیل کنید.


--RealUnknown ‏۱۵ ژوئیهٔ ۲۰۱۲، ساعت ۱۱:۲۹ (IRDT)

ابزارهای شخصی

گویش‌ها
فضاهای نام
عملکردها
گشتن
جعبه‌ابزار