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時,它背後的堆外內存也會被回收。

http://ju.outofmemory.cn/entry/200574

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章