1. 程式人生 > 其它 >簡單型別與複雜型別+垃圾回收機制

簡單型別與複雜型別+垃圾回收機制

簡單型別又叫做基本資料型別或者值型別。

複雜型別又叫做引用型別。

·值型別:簡單資料型別/基本資料型別,在儲存時變數中儲存的是值本身,因此叫做值型別。

string、number、boolean、undefined、null(返回空物件)

如果有個變數,我們以後打算儲存為物件,暫時沒想好放啥,這時候就給null。

·引用型別:複雜資料型別,在儲存時,變數中儲存的僅僅是地址(引用),因此叫做引用資料型別。通過new關鍵字建立的物件(系統物件,自定義物件),如Object、Array、Date等等。

堆疊空間分配區別:

1.棧(作業系統):由作業系統自動分配釋放存放函式的引數值、區域性變數的值等,其操作方式類似於資料結構中的棧;簡單資料型別存放到棧裡面。

2.堆(作業系統):儲存複雜型別(物件),一般由程式設計師分配釋放,若程式設計師不釋放,由垃圾回收機制回收。複雜資料型別存放到堆裡面。

簡單資料型別 是存放在棧裡面,裡面直接開闢一個空間 存放的是值。

複雜資料型別 首先在棧裡面存放地址,十六進位制表示,然後這個地址就指向堆裡面的資料。

垃圾回收機制

JavaScript 中的記憶體管理是自動執行的,而且是不可見的。

垃圾

·沒有被引用的物件

·幾個物件引用形成一個環,互相引用,但無法訪問到

垃圾回收機制:不具有可達性的塊或值會被清理

“可達性” 值就是那些以某種方式可訪問或可用的值,它們被保證儲存在記憶體中。

優化:
分代回收——物件分為兩組:“新物件”和“舊物件”。許多物件出現,完成它們的工作並迅速結 ,它們很快就會被清理乾淨。那些活得足夠久的物件,會變“老”,並且很少接受檢查。
增量回收——如果有很多物件,並且我們試圖一次遍歷並標記整個物件集,那麼可能會花費一些時間,並在執行中會有一定的延遲。因此,引擎試圖將垃圾回收分解為多個部分。然後,各個部分分別執行。這需要額外的標記來跟蹤變化,這樣有很多微小的延遲,而不是很大的延遲。
空閒時間收集——垃圾回收器只在 CPU 空閒時執行,以減少對執行的可能影響。