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