1. 程式人生 > >直接記憶體和堆記憶體的區別

直接記憶體和堆記憶體的區別

同樣是在按Java工程師成神之路的學習過程中學到的。

定義
  • 直接記憶體:NIO的Buffer提供了一個可以不經過JVM記憶體直接訪問系統實體記憶體的類——DirectBuffer。 DirectBuffer類繼承自ByteBuffer,但和普通的ByteBuffer不同,普通的ByteBuffer仍在JVM堆上分配記憶體,其最大記憶體受到最大堆記憶體的限制;而DirectBuffer直接分配在實體記憶體中,並不佔用堆空間,其可申請的最大記憶體受作業系統限制。

  • 堆記憶體:Java 虛擬機器具有一個堆,堆是執行時資料區域,所有類例項和陣列的記憶體均從此處分配。堆是在 Java 虛擬機器啟動時建立的。物件的堆記憶體由稱為垃圾回收器的自動記憶體管理系統回收。

區別和應用場景
  • 直接記憶體的讀寫操作比普通Buffer快,但它的建立、銷燬比普通Buffer慢。

  • 因此直接記憶體使用於需要大記憶體空間且頻繁訪問的場合,不適用於頻繁申請釋放記憶體的場合。

具體程式碼驗證

待續。。。