توضیح مفصل فضای حافظه ArkTS: از SemiSpace تا HugeObjectSpace

Summarize this content to 400 words in Persian Lang
هدف این مقاله بررسی جزئیات فنی سیستم HarmonyOS Next هوآوی (در حال حاضر API12) و خلاصه کردن آن بر اساس شیوههای توسعه واقعی است.به طور عمده به عنوان حاملی برای اشتراک گذاری و تبادل فناوری استفاده می شود و اشتباهات و حذفیات اجتناب ناپذیر است تا نظرات و سوالات ارزشمندی را برای پیشرفت متقابل مطرح کنند.این مقاله محتوای اصلی است. هر گونه کپی برداری به هر شکل باید منبع و نویسنده اصلی را ذکر کند
مقدمه
به عنوان زبان توسعه سیستم Hongmeng، ArkTS مکانیزم مدیریت فضای حافظه غنی را برای برآوردن نیازهای حافظه در سناریوهای مختلف فراهم می کند. این مقاله به طور مفصل ساختار فضای حافظه ArkTS از جمله SemiSpace، OldSpace، HugeObjectSpace، ReadOnlySpace، NonMovableSpace، SnapshotSpace و MachineCodeSpace را توضیح می دهد و نحوه بهینه سازی استفاده از این فضاها و بهبود عملکرد برنامه را معرفی می کند.
فضای حافظه SemiSpace
SemiSpace بخشی از فضای نسل جوان است و برای ذخیره اشیاء تازه ایجاد شده استفاده می شود. فضای نسل جوان به دو قسمت نیمه (SemiSpace) تقسیم می شود که به ترتیب برای ایجاد اشیا و بازیافت استفاده می شود. هنگامی که یکی از نیمی از قسمت ها کمبود فضا داشته باشد، نسل جوان GC فعال می شود، اشیاء باقی مانده را در نیمه دیگر کپی می کند و نیمه قدیمی را بازیافت می کند.
OldSpace 和 HugeObjectSpace
OldSpace برای ذخیره اشیایی که زمان بقای طولانی و نرخ بقای بالایی دارند استفاده می شود. GC نسل قدیم عمدتاً از الگوریتم هایی مانند Sweep و Compact برای تمیز کردن و فشرده سازی فضای نسل قدیم استفاده می کند.HugeObjectSpace برای ذخیره اشیاء بزرگ مانند آرایه های بزرگ و غیره استفاده می شود. فضای شی بزرگ با استفاده از یک منطقه جداگانه مدیریت می شود تا از عملکرد اشیاء بزرگ اطمینان حاصل شود.
فضای فقط خواندنی و فضای غیر متحرک
ReadOnlySpace برای ذخیره داده های فقط خواندنی در طول زمان اجرا استفاده می شود، مانند ثابت های رشته و غیره. فضای حافظه ReadOnlySpace توسط زباله جمع کننده بازیابی نمی شود، بنابراین باید با احتیاط از آن استفاده شود.NonMovableSpace برای ذخیره اشیاء غیرقابل حرکت مانند اشیاء کلاس سیستم و غیره استفاده می شود. فضای حافظه NonMovableSpace توسط زباله جمع کن جابه جا نمی شود، بنابراین باید با احتیاط از آن استفاده شود.
عکس های فوری و فضای کد ماشین
SnapshotSpace فضایی که هنگام ریختن عکس های فوری پشته استفاده می شود. عکسهای فوری Heap میتوانند به توسعهدهندگان کمک کنند تا میزان استفاده از حافظه و روابط شی را تجزیه و تحلیل کنند.MachineCodeSpace برای ذخیره کد ماشین برنامه استفاده می شود. فضای حافظه MachineCodeSpace توسط زباله جمع کننده بازیابی نمی شود، بنابراین باید با احتیاط از آن استفاده شود.
پارامترهای پیکربندی و گزینه های بهینه سازی برای فضاهای مختلف
نوع فضایی
پارامترهای پیکربندی
اثر
گزینه های بهینه سازی
SemiSpace
semiSpaceSize، semiSpaceTriggerConcurrentMark، semiSpaceStepOvershootSize
اندازه SemiSpace و شرایط ماشه GC را کنترل کنید
برای بهبود کارایی بازیافت، پارامترها را بر اساس نیازهای برنامه تنظیم کنید
OldSpace
oldSpaceOvershootSize
اندازه Overshoot OldSpace را کنترل کنید
برای جلوگیری از GC مکرر، پارامترها را بر اساس میزان مصرف حافظه تنظیم کنید
ReadOnlySpace
defaultReadOnlySpaceSize
اندازه ReadOnlySpace را کنترل کنید
برای جلوگیری از نشت حافظه با احتیاط استفاده کنید
NonMovableSpace
defaultNonMovableSpaceSize
اندازه NonMovableSpace را کنترل کنید
برای جلوگیری از نشت حافظه با احتیاط استفاده کنید
SnapshotSpace
defaultSnapshotSpaceSize
اندازه SnapshotSpace را کنترل کنید
پارامترها را در صورت نیاز تنظیم کنید تا کارایی تولید عکس فوری را بهینه کنید
MachineCodeSpace
defaultMachineCodeSpaceSize
اندازه MachineCodeSpace را کنترل کنید
برای جلوگیری از نشت حافظه با احتیاط استفاده کنید
یک مثال بزنید
کد مثال زیر نحوه تعیین و بهینه سازی فضاهای حافظه مختلف در ArkTS را نشان می دهد:
// 设置 SemiSpace 大小
ArkRuntimeConfig.setSemiSpaceSize(8);
// 触发年轻代 GC
ArkTools.hintGC();
// 设置 OldSpace 过冲大小
ArkRuntimeConfig.setOldSpaceOvershootSize(16);
// 触发老年代 GC
ArkTools.hintOldSpaceGC();
// 指定使用大对象空间
let array = new Int32Array(1024 * 1024); // 创建一个 1MB 的数组
// 指定使用只读空间
let constant = “这是一个常量字符串”;
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در کد بالا پاس می کنیم ArkRuntimeConfig.setSemiSpaceSize() متد اندازه SemiSpace را تنظیم می کند و پاس می دهد ArkTools.hintGC() روش GC نسل جوان را تحریک می کند. ما هم پاس می کنیم ArkRuntimeConfig.setOldSpaceOvershootSize() متد اندازه Overshoot OldSpace را تنظیم می کند و پاس می دهد ArkTools.hintOldSpaceGC() روش GC نسل قدیم را تحریک می کند. علاوه بر این، یک آرایه بزرگ ایجاد کردیم و استفاده از فضای شی بزرگ را مشخص کردیم و یک رشته ثابت ایجاد کردیم و استفاده از فضای فقط خواندنی را مشخص کردیم.
خلاصه کنید
ArkTS مکانیزم مدیریت فضای حافظه غنی را ارائه می دهد که می تواند به توسعه دهندگان کمک کند تا استفاده از حافظه را بهینه کنند و عملکرد برنامه را با توجه به سناریوهای مختلف بهبود بخشند. با درک ویژگی ها و پارامترهای پیکربندی فضاهای مختلف، اگر بتوانیم منابع حافظه را بهتر مدیریت کنیم، می توانیم از نشت حافظه جلوگیری کرده و پایداری برنامه را بهبود ببخشیم.
هدف این مقاله بررسی جزئیات فنی سیستم HarmonyOS Next هوآوی (در حال حاضر API12) و خلاصه کردن آن بر اساس شیوههای توسعه واقعی است.
به طور عمده به عنوان حاملی برای اشتراک گذاری و تبادل فناوری استفاده می شود و اشتباهات و حذفیات اجتناب ناپذیر است تا نظرات و سوالات ارزشمندی را برای پیشرفت متقابل مطرح کنند.
این مقاله محتوای اصلی است. هر گونه کپی برداری به هر شکل باید منبع و نویسنده اصلی را ذکر کند
مقدمه
به عنوان زبان توسعه سیستم Hongmeng، ArkTS مکانیزم مدیریت فضای حافظه غنی را برای برآوردن نیازهای حافظه در سناریوهای مختلف فراهم می کند. این مقاله به طور مفصل ساختار فضای حافظه ArkTS از جمله SemiSpace، OldSpace، HugeObjectSpace، ReadOnlySpace، NonMovableSpace، SnapshotSpace و MachineCodeSpace را توضیح می دهد و نحوه بهینه سازی استفاده از این فضاها و بهبود عملکرد برنامه را معرفی می کند.
فضای حافظه SemiSpace
SemiSpace بخشی از فضای نسل جوان است و برای ذخیره اشیاء تازه ایجاد شده استفاده می شود. فضای نسل جوان به دو قسمت نیمه (SemiSpace) تقسیم می شود که به ترتیب برای ایجاد اشیا و بازیافت استفاده می شود. هنگامی که یکی از نیمی از قسمت ها کمبود فضا داشته باشد، نسل جوان GC فعال می شود، اشیاء باقی مانده را در نیمه دیگر کپی می کند و نیمه قدیمی را بازیافت می کند.
OldSpace 和 HugeObjectSpace
OldSpace برای ذخیره اشیایی که زمان بقای طولانی و نرخ بقای بالایی دارند استفاده می شود. GC نسل قدیم عمدتاً از الگوریتم هایی مانند Sweep و Compact برای تمیز کردن و فشرده سازی فضای نسل قدیم استفاده می کند.
HugeObjectSpace برای ذخیره اشیاء بزرگ مانند آرایه های بزرگ و غیره استفاده می شود. فضای شی بزرگ با استفاده از یک منطقه جداگانه مدیریت می شود تا از عملکرد اشیاء بزرگ اطمینان حاصل شود.
فضای فقط خواندنی و فضای غیر متحرک
ReadOnlySpace برای ذخیره داده های فقط خواندنی در طول زمان اجرا استفاده می شود، مانند ثابت های رشته و غیره. فضای حافظه ReadOnlySpace توسط زباله جمع کننده بازیابی نمی شود، بنابراین باید با احتیاط از آن استفاده شود.
NonMovableSpace برای ذخیره اشیاء غیرقابل حرکت مانند اشیاء کلاس سیستم و غیره استفاده می شود. فضای حافظه NonMovableSpace توسط زباله جمع کن جابه جا نمی شود، بنابراین باید با احتیاط از آن استفاده شود.
عکس های فوری و فضای کد ماشین
SnapshotSpace فضایی که هنگام ریختن عکس های فوری پشته استفاده می شود. عکسهای فوری Heap میتوانند به توسعهدهندگان کمک کنند تا میزان استفاده از حافظه و روابط شی را تجزیه و تحلیل کنند.
MachineCodeSpace برای ذخیره کد ماشین برنامه استفاده می شود. فضای حافظه MachineCodeSpace توسط زباله جمع کننده بازیابی نمی شود، بنابراین باید با احتیاط از آن استفاده شود.
پارامترهای پیکربندی و گزینه های بهینه سازی برای فضاهای مختلف
نوع فضایی | پارامترهای پیکربندی | اثر | گزینه های بهینه سازی |
---|---|---|---|
SemiSpace | semiSpaceSize، semiSpaceTriggerConcurrentMark، semiSpaceStepOvershootSize | اندازه SemiSpace و شرایط ماشه GC را کنترل کنید | برای بهبود کارایی بازیافت، پارامترها را بر اساس نیازهای برنامه تنظیم کنید |
OldSpace | oldSpaceOvershootSize | اندازه Overshoot OldSpace را کنترل کنید | برای جلوگیری از GC مکرر، پارامترها را بر اساس میزان مصرف حافظه تنظیم کنید |
ReadOnlySpace | defaultReadOnlySpaceSize | اندازه ReadOnlySpace را کنترل کنید | برای جلوگیری از نشت حافظه با احتیاط استفاده کنید |
NonMovableSpace | defaultNonMovableSpaceSize | اندازه NonMovableSpace را کنترل کنید | برای جلوگیری از نشت حافظه با احتیاط استفاده کنید |
SnapshotSpace | defaultSnapshotSpaceSize | اندازه SnapshotSpace را کنترل کنید | پارامترها را در صورت نیاز تنظیم کنید تا کارایی تولید عکس فوری را بهینه کنید |
MachineCodeSpace | defaultMachineCodeSpaceSize | اندازه MachineCodeSpace را کنترل کنید | برای جلوگیری از نشت حافظه با احتیاط استفاده کنید |
یک مثال بزنید
کد مثال زیر نحوه تعیین و بهینه سازی فضاهای حافظه مختلف در ArkTS را نشان می دهد:
// 设置 SemiSpace 大小
ArkRuntimeConfig.setSemiSpaceSize(8);
// 触发年轻代 GC
ArkTools.hintGC();
// 设置 OldSpace 过冲大小
ArkRuntimeConfig.setOldSpaceOvershootSize(16);
// 触发老年代 GC
ArkTools.hintOldSpaceGC();
// 指定使用大对象空间
let array = new Int32Array(1024 * 1024); // 创建一个 1MB 的数组
// 指定使用只读空间
let constant = "这是一个常量字符串";
در کد بالا پاس می کنیم ArkRuntimeConfig.setSemiSpaceSize()
متد اندازه SemiSpace را تنظیم می کند و پاس می دهد ArkTools.hintGC()
روش GC نسل جوان را تحریک می کند. ما هم پاس می کنیم ArkRuntimeConfig.setOldSpaceOvershootSize()
متد اندازه Overshoot OldSpace را تنظیم می کند و پاس می دهد ArkTools.hintOldSpaceGC()
روش GC نسل قدیم را تحریک می کند. علاوه بر این، یک آرایه بزرگ ایجاد کردیم و استفاده از فضای شی بزرگ را مشخص کردیم و یک رشته ثابت ایجاد کردیم و استفاده از فضای فقط خواندنی را مشخص کردیم.
خلاصه کنید
ArkTS مکانیزم مدیریت فضای حافظه غنی را ارائه می دهد که می تواند به توسعه دهندگان کمک کند تا استفاده از حافظه را بهینه کنند و عملکرد برنامه را با توجه به سناریوهای مختلف بهبود بخشند. با درک ویژگی ها و پارامترهای پیکربندی فضاهای مختلف، اگر بتوانیم منابع حافظه را بهتر مدیریت کنیم، می توانیم از نشت حافظه جلوگیری کرده و پایداری برنامه را بهبود ببخشیم.