1. 程式人生 > >java堆外記憶體

java堆外記憶體

簡介

誰在使用堆外記憶體:執行緒棧,應用程式程式碼,NIO快取
什麼東西需要池化,昂貴的物件:執行緒,資料庫連線池, socket。

好處: 理論上能減少GC時間, 提高效率

JDK5.0之後,程式碼中能直接操作本地記憶體的方式有2種:使用未公開的Unsafe和NIO包下ByteBuffer。
JDK7開始,DirectByteBuffer分配記憶體時預設已不做分頁對齊,不會再每次分配並清零 實際需要+分頁大小(4k)的記憶體,這對效能應有較大提升,所以Oracle專門寫在了 Enhancements in Java I/O 裡。

基於GC的回收回收

存在於堆內的DirectByteBuffer物件很小,只存著基地址和大小等幾個屬性,和一個Cleaner,但它代表著後面所分配的一大段記憶體,是所謂的冰山物件。通過前面說的Cleaner,堆內的DirectByteBuffer物件被GC時,它背後的堆外記憶體也會被回收。