Prefab內Text的GC優化

2021-10-12 12:55:52 字數 1179 閱讀 6794

預製中text為空時設定為乙個空格

預設初始化乙個很大的字串, 浪費gc

想要弄清楚這個問題先要看text內部初始化記憶體的機制。

有內容的時候會用預設長度去分配記憶體,比如乙個空字元長度就是1,否則就用預設的記憶體分配方式。

當我們新增的元素數量小於等於capacity的值時,list是不會重新調整內部資料結構,也就是不會重新申請或者分配記憶體,而當我們新增的元素數量大於capacity 的值時,list就會不斷的調整內部資料結構或者重新申請分配記憶體,這樣的話對效率肯定會有一定的影響的。

當我們使用listlist = new list();例項化乙個list物件是,.net framework只是在記憶體中申請了一塊內存在存放list物件本身,系統此時並不知道list會有多少item元素。當我們向list新增第乙個item時,list會申請能儲存4個item元素的儲存空間,此時capacity是4,但是當我們新增到第五個item時,此時的capacity就會變成8,也就是當list發現元素的總數大於capacity數量時,會主動申請並重新分配記憶體,當我們新增到第九個item時,capacity不是12而是16,也就是說list每次申請的記憶體數量都是之前item元素數量兩倍。然後將當前所有的item元素系但新增的元素複製到新的記憶體。

大家可以看到,如果list需要新增的元素特別多時,list會不斷地申請心記憶體,複製已有元素和新加元素到新記憶體,這個過程會產生資源的浪費及效能問題。

如果當設定的capacity值遠大於list的實際元素數量時,應使用trimexcess()方法釋放點未使用的記憶體。

關於jvm的GC調優的做法

如果不能忍受full gc,預設設定也達不到你的期望值,並且應用停頓時間和你的目標不一致,那麼你需要對gc調優。調優的基本想法如下 1,能在新生eden區代 的資源,盡量不讓資源進入到survivor區。2,能在survivor區 的資源,盡量不讓資源進入old區。其實,我們的最終目的是盡量不讓太多...

JVM的GC機制及JVM的調優方法

記憶體管理和垃圾 是jvm非常關鍵的點,對j a效能的剖析而言,了解記憶體管理和垃圾 的基本策略非常重要。1.在程式執行過程當中,會建立大量的物件,這些物件,大部分是短週期的物件,小部分是長週期的物件,對於短週期的物件,需要頻繁地進行垃圾 以保證無用對 象盡早被釋放掉,對於長週期物件,則不需要頻率垃...

python的記憶體調優 詳解python 記憶體優化

寫在之前 圍繞類的話題,說是說不完的,僅在特殊方法,除了我們在前面遇到過的 init new str 等之外還有很多。雖然它們只是在某些特殊的場景中才會用到,但是學會它們卻可以成為你熟悉這門語言路上的鋪路石。所以我會在試圖介紹一些 黑魔法 讓大家多多感受一下 python 的魅力所在,俗話說 藝多不...