什麼是堆外記憶體off-heap

banq發表於2014-01-12
堆Heap是記憶體中動態分配物件居住的地方。如果使用new一個物件,它就被分配在堆記憶體上。這是相對於Stack,如果你有一個區域性變數則它是位於Stack棧記憶體空間。

BigMemory是用來避免GC對堆的開銷,從幾MB或GB大。 BigMemory透過直接的ByteBuffers使用JVM程式的記憶體地址空間,不像其他原生Java物件接受GC管束。

EHCache(Terrcotta BigMemory)的 off-heap將你的物件從堆中脫離出來序列化,然後儲存在一大塊記憶體中,這就像它儲存到磁碟上上一樣,但它仍然在RAM中。物件在這種狀態下不能直接使用,它們必須首先反序列化。也不受垃圾收集。序列化和反序列化會影響效能。(FST-serialization還是很快)。

使用堆外記憶體能夠降低GC導致的暫停。

應用場景:
1.Session會話快取,儲存不啟用的使用者session,比如使用者沒有正常退出,我們也無法確定他會不會短時間內再回來,將其會話存到堆外記憶體。一旦再次登入,無需訪問資料庫可再次啟用。

2.計算結果的快取,大量查詢的結果等,擊中率比較低的都可以遷移到堆外。

[該貼被banq於2014-01-12 17:04修改過]

相關文章