On-heap vs Off-heap 堆內內存與堆外內存


JVM主要的內存區域有

  • heap
  • stack
  • 其它寄存器。

heap主要是用來存儲對象實例及數組值,可以認為java中所有通過new創建的對象都在此分配。

On-heap是指在堆內內存,由GC進行創建回收,可以通過參數-Xms(最小)和-Xmx(最大)來控制

Off-heap是指在堆外內存,不由GC創建,但可以通過full GC回收,通過-XX:MaxDirectMemorySize設置大小。

通俗的講,Off-heap存儲就好比在Java堆外部的數據庫中存儲對象。
優點是我們可以在該數據庫中存儲大量對象,而不受垃圾收集器管理。
但是,當我們運行查詢以從該數據庫檢索對象時,這些對象將復制到Java堆上。
如果我們的應用程序經常檢索某個對象,然后在處理請求時丟棄它們,則必須對每個請求檢索的對象進行垃圾回收。
而若我們使用On-heap存儲,在處理每個請求后,所需的對象將保留在堆上,以備后續請求繼續使用。

緩存數據存放一般支持On-heap及Off-heap:
堆內存放開銷小、效率高、存儲大小受限制,
堆外存放開銷大(還是比disk快,建議使用緩沖池)、存儲容量較大,適合 存儲不怎么變化 的數據。

參考資料
groups.google.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM