天天看點

95-290-055-源碼-記憶體管理-HybridMemorySegment

95-290-055-源碼-記憶體管理-HybridMemorySegment

​ Flink的記憶體管理器管理着用于排序、散列和緩存所需的記憶體。記憶體以相等大小的(Segments)表示,稱為記憶體頁。操作器通過請求多個記憶體頁來配置設定記憶體。在Flink中,記憶體又分為堆記憶體和非堆記憶體。至于是去申請什麼類型的記憶體,這裡有相關的參數去配置。

​ 記憶體管理器可以預先配置設定所有記憶體,或者按需配置設定記憶體。在前者中,記憶體将從開始就被占用和保留,這意味着在請求記憶體時不能出現

OutOfMemoryError

,釋放的記憶體也将傳回到記憶體管理器的池中。按需配置設定是指記憶體管理器隻跟蹤目前配置設定了多少記憶體段(僅記賬)。釋放記憶體頁不會将其添加到池中,而是讓垃圾收集器重新聲明它。

​ Flink作為一個高效的流架構,為了避免JVM的固有缺陷(java對象存儲密度低,FGC影響吞吐和響應等),必然走上自主管理記憶體的道路。

​ 這個

MemorySegment

就是Flink的記憶體抽象。預設情況下,一個MemorySegment可以被看做是一個32kb大的記憶體塊的抽象。這塊記憶體既可以是JVM裡的一個byte[],也可以是堆外記憶體(DirectByteBuffer)。

​ 如果說byte[]數組和dir

繼續閱讀