每天一點基礎K8S--K8S中排程策略---節點選擇器nodeName、nodeSelector
阿新 • • 發佈:2022-11-29
JavaScript 是使用垃圾回收的語言,他會自動進行記憶體管理,每隔一段時間去判斷變數是否不再使用 然後釋放它佔用的記憶體。
垃圾回收有兩種標記策略- 標記清理與引用計數,其中標記清理是最流行的策略
標記清理 - 先標記記憶體中儲存的所有變數,將在上下文中的變數或者被引用的變數的標記清除,之後垃圾回收會做一次記憶體清理將所有帶標記的銷燬,釋放其記憶體
引用計數 - 在變數被引用或者被賦值時將計數+1,在被覆蓋時-1,在回收時銷燬所有值為0的變數。 但是如果是通過各自屬性互相引用的情況下,他們的引用數永遠不會變成0,得不到釋放。
垃圾回收機制由於是瀏覽器週期性執行的,如果記憶體中分配了很多變數,則可能造成效能損失,尤其在移動端的瀏覽器裝置記憶體更小。優化記憶體佔用的最佳手段就是保證在執行時只儲存必要的資料,不用的資料設定為null,釋放其引用
優化手段:
1.用const let宣告變數,限制作用域,讓垃圾回收程式更早的介入
2.隱藏類和刪除操作
隱藏類的意思是 由同一個建構函式創建出的類的例項會共享隱藏類,但是如果對其中一個進行新增屬性的操作的話,二者不在共享隱藏類。例:
function Article() { this.title = 'xxx'; } let a1 = new Article(); let a2 = new Article(); //a1 a2 共享隱藏類 a2.author = 'Jake'; //不再共享
最好的方案是避免這種動態新增,在建構函式中一次性宣告所有屬性 例:
function Article(opt_author) {this.title = 'Inauguration Ceremony Features Kazoo Band'; this.author = opt_author; } let a1 = new Article(); let a2 = new Article('Jake');
3. 防止記憶體洩露
記憶體洩露多數是由於引用不合理導致的例如:意外宣告全域性變數,定時器回撥通過閉包引用了外部變數,閉包