11-直接内存 Direct Memory
生活随笔
收集整理的這篇文章主要介紹了
11-直接内存 Direct Memory
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 直接內(nèi)存 Direct Memory
- 非直接緩存區(qū)和緩存區(qū)
- 存在的問題
直接內(nèi)存 Direct Memory
不是虛擬機運行時數(shù)據(jù)區(qū)的一部分,也不是《Java虛擬機規(guī)范》中定義的內(nèi)存區(qū)域。
直接內(nèi)存是在Java堆外的、直接向系統(tǒng)申請的內(nèi)存區(qū)間。
來源于NIO,通過存在堆中的DirectByteBuffer操作Native內(nèi)存
通常,訪問直接內(nèi)存的速度會優(yōu)于Java堆。即讀寫性能高。
- 因此出于性能考慮,讀寫頻繁的場合可能會考慮使用直接內(nèi)存。
- Java的NIO庫允許Java程序使用直接內(nèi)存,用于數(shù)據(jù)緩沖區(qū)
使用下列代碼,直接分配本地內(nèi)存空間
int BUFFER = 1024*1024*1024; // 1GB ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER);非直接緩存區(qū)和緩存區(qū)
原來采用BIO的架構,我們需要從用戶態(tài)切換成內(nèi)核態(tài)
NIO的方式使用了緩存區(qū)的概念
存在的問題
也可能導致outofMemoryError異常
由于直接內(nèi)存在Java堆外,因此它的大小不會直接受限于-xmx指定的最大堆大小,但是系統(tǒng)內(nèi)存是有限的,Java堆和直接內(nèi)存的總和依然受限于操作系統(tǒng)能給出的最大內(nèi)存。
缺點
- 分配回收成本較高
- 不受JVM內(nèi)存回收管理
直接內(nèi)存大小可以通過MaxDirectMemorySize設置
如果不指定,默認與堆的最大值-xmx參數(shù)值一致
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的11-直接内存 Direct Memory的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12-执行引擎
- 下一篇: 【Redis】1.Redis入门简介以及