Java Garbage Collection

GC با آزاد کردن خودکار حافظه باعث سریعتر شدن برنامه نویسی می‌شه و از نوشتن کد‌های اضافه جلوگیری می‌کنه.

ادامه نوشته

The end of the Java's Architecture's Story

ما در مورد اینکه برنامه‌ها چجوری اجرا می‌شن صحبت کردیم ولی درباره اجرا کننده برنامه‌ها هیچ صحبتی نکردیم.

ادامه نوشته

Execution Engine

bytecode ها اینجا اجرا می‌شن. Execution Engine دستورات رو خط به خط اجرا می‌کنه‌.

ادامه نوشته

Runtime Data Area

JVM داخل رم یک فضا برای بارگذاری داده‌ها در اختیار داره. class loader شی باینری متناظر هر کلاس رو تولید می‌کنه و اونها رو بصورت جداگانه و با اطلاعات زیر به Runtime Data Area می‌‌ده و اون هم توی method area ذخیره می‌کنه.

ادامه نوشته

Class Loader Subsystem

به ازای هر برنامه که اجرا می‌شه یک نمونه از ماشین مجازی جاوا JVM داخل رم سیستم بارگذاری می‌شه و با استفاده از Class Loader Subsystem کلاس های مورد نظر رو وارد رم می‌کنه و بهش می‌گن dynamic class loading که کلاس‌ها رو load و link و initialize می‌کنه. البته این کار رو فقط یک بار در زمان اجرا انجام می‌ده.

ادامه نوشته

ART vs Dalvik

Dalvik از اندروید ۵ Lolipop جایگزین ART شد.

Dalvik به صورت Just-In-Time (JIT) کار می‌کنه، یعنی هر بار که برنامه اجرا میشه بایت‌کد ها رو اجرا میکنه به همین دلیل CPU بیشتری مصرف می‌کنه و زمان اجرای برنامه هم بیشتر هستش و باتری بیشتری هم مصرف میشه. ولی فضای کمتی نیاز دارن برنامه ها و بود دستگاه هم سریعتر انجام میشه.

ART به صورت Ahead-Of-Time (AOT) کار می‌کنه، یعنی در زمان نصب برنامه بایت‌کد ها رو تبدیل می‌کنه. این کار باعث می‌شه نصب برنامه بیشتر زمان ببره و برنامه ها فضای بیشتری اشغال کنن (حدود ۷۵ درصد بیشتر) ولی در زمان اجرا برنامه ها بسیار سریعتر اجرا میشن و باتری کمتری هم مصرف می‌کنن. البته بوت شدن دستگاه هم کندتر هستش چون در زمان بوت شدن شروع به تبدیل بایت‌کد های برنامه ها می‌کنه و پیام Optimizing apps رو نمایش میده.