Java Garbage Collection
GC با آزاد کردن خودکار حافظه باعث سریعتر شدن برنامه نویسی میشه و از نوشتن کدهای اضافه جلوگیری میکنه.
GC با آزاد کردن خودکار حافظه باعث سریعتر شدن برنامه نویسی میشه و از نوشتن کدهای اضافه جلوگیری میکنه.
ما در مورد اینکه برنامهها چجوری اجرا میشن صحبت کردیم ولی درباره اجرا کننده برنامهها هیچ صحبتی نکردیم.
bytecode ها اینجا اجرا میشن. Execution Engine دستورات رو خط به خط اجرا میکنه.
JVM داخل رم یک فضا برای بارگذاری دادهها در اختیار داره. class loader شی باینری متناظر هر کلاس رو تولید میکنه و اونها رو بصورت جداگانه و با اطلاعات زیر به Runtime Data Area میده و اون هم توی method area ذخیره میکنه.
به ازای هر برنامه که اجرا میشه یک نمونه از ماشین مجازی جاوا JVM داخل رم سیستم بارگذاری میشه و با استفاده از Class Loader Subsystem کلاس های مورد نظر رو وارد رم میکنه و بهش میگن dynamic class loading که کلاسها رو load و link و initialize میکنه. البته این کار رو فقط یک بار در زمان اجرا انجام میده.
Dalvik از اندروید ۵ Lolipop جایگزین ART شد.
Dalvik به صورت Just-In-Time (JIT) کار میکنه، یعنی هر بار که برنامه اجرا میشه بایتکد ها رو اجرا میکنه به همین دلیل CPU بیشتری مصرف میکنه و زمان اجرای برنامه هم بیشتر هستش و باتری بیشتری هم مصرف میشه. ولی فضای کمتی نیاز دارن برنامه ها و بود دستگاه هم سریعتر انجام میشه.
ART به صورت Ahead-Of-Time (AOT) کار میکنه، یعنی در زمان نصب برنامه بایتکد ها رو تبدیل میکنه. این کار باعث میشه نصب برنامه بیشتر زمان ببره و برنامه ها فضای بیشتری اشغال کنن (حدود ۷۵ درصد بیشتر) ولی در زمان اجرا برنامه ها بسیار سریعتر اجرا میشن و باتری کمتری هم مصرف میکنن. البته بوت شدن دستگاه هم کندتر هستش چون در زمان بوت شدن شروع به تبدیل بایتکد های برنامه ها میکنه و پیام Optimizing apps رو نمایش میده.