国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

作為 Java 開發(fā)者,你需要了解的堆外內(nèi)存知識

存儲 存儲軟件
很久沒有遇到堆外內(nèi)存相關(guān)的問題了,五一假期剛結(jié)束,便不期而遇,以前也處理過幾次這類問題,但都沒有總結(jié),覺得是時候總結(jié)一下了。

 1. 引言

很久沒有遇到堆外內(nèi)存相關(guān)的問題了,五一假期剛結(jié)束,便不期而遇,以前也處理過幾次這類問題,但都沒有總結(jié),覺得是時候總結(jié)一下了。

先來看一個 Demo:在 Demo 中分配堆外內(nèi)存用的是 allocateDirect 方法,但其內(nèi)部調(diào)用的是 DirectByteBuffer,換言之,DirectByteBuffer 才是實際操作堆外內(nèi)存的類,因此,本場 Chat 將圍繞 DirectByteBuffer 展開。

[[233033]]

  1. import java.nio.ByteBuffer;public class Demo {    public static void main( String[] args ) 
  2.     {        //分配一塊1024Bytes的堆外內(nèi)存(直接內(nèi)存) 
  3.         //allocateDirect方法內(nèi)部調(diào)用的是DirectByteBuffer 
  4.         ByteBuffer buffer=ByteBuffer.allocateDirect(1024); 
  5.         System.out.println(buffer.capacity());        //向堆外內(nèi)存中讀寫數(shù)據(jù) 
  6.         buffer.putInt(0,2018); 
  7.         System.out.println(buffer.getInt(0));        
  8.     } 

2. 什么是堆外內(nèi)存?

Java 開發(fā)者一般都知道堆內(nèi)存,但卻未必了解堆外內(nèi)存。事實上,除了堆內(nèi)存,Java 還可以使用堆外內(nèi)存,也稱直接內(nèi)存(Direct Memory)。

顧名思義,堆外內(nèi)存是在 JVM Heap 之外分配的內(nèi)存塊,并不是 JVM 規(guī)范中定義的內(nèi)存區(qū)域,堆外內(nèi)存用得并不多,但十分重要。

讀者也許會有一個疑問:既然已經(jīng)有堆內(nèi)存,為什么還要用堆外內(nèi)存呢?這主要是因為堆外內(nèi)存在 IO 操作方面的優(yōu)勢。

舉一個例子:在通信中,將存在于堆內(nèi)存中的數(shù)據(jù) flush 到遠程時,需要首先將堆內(nèi)存中的數(shù)據(jù)拷貝到堆外內(nèi)存中,然后再寫入 Socket 中;

如果直接將數(shù)據(jù)存到堆外內(nèi)存中就可以避免上述拷貝操作,提升性能。類似的例子還有讀寫文件。

目前,很多 NIO 框架 (如 netty,rpc) 會采用 Java 的 DirectByteBuffer 類來操作堆外內(nèi)存,DirectByteBuffer 類對象本身位于 Java 內(nèi)存模型的堆中,由 JVM 直接管控、操縱。

但是,DirectByteBuffer 中用于分配堆外內(nèi)存的方法 unsafe.allocateMemory(size) 是個一個 native 方法,本質(zhì)上是用 C 的 malloc 來進行分配的。

分配的內(nèi)存是系統(tǒng)本地的內(nèi)存,并不在 Java 的內(nèi)存中,也不屬于 JVM 管控范圍,所以在 DirectByteBuffer 一定會存在某種特別的方式來操縱堆外內(nèi)存。

3. 堆外內(nèi)存創(chuàng)建過程深度解析

首先,我們來看一下 DirectByteBuffer 源代碼,從中洞悉分配堆外內(nèi)存的過程:

3.1 ***個重要方法:

  1. Bits.reserveMemory(size, cap); 

源代碼如下:

該方法用于在系統(tǒng)中保存總分配內(nèi)存(按頁分配)的大小和實際內(nèi)存的大小,具體執(zhí)行中需要首先用 tryReserveMemory 方法來判斷系統(tǒng)內(nèi)存(堆外內(nèi)存)是否足夠,具體代碼如下:

從 Bits.reserveMemory(size, cap) 源碼可以看出,其執(zhí)行過程中,可能遇到以下三種情況:

1. 最樂觀的情況:可用堆外內(nèi)存足夠,reserveMemory 方法返回 true,該方法結(jié)束。

2. 如果不幸,堆外內(nèi)存不足,則須進行第二步:

  1. jlra.tryHandlePendingReference() 

 會觸發(fā)一次非堵塞的 

Reference#tryHandlePending(false),該方法會將已經(jīng)被 JVM 垃圾回收的 DirectBuffer 對象的堆外內(nèi)存釋放。

3. 如果在進行一次堆外內(nèi)存資源回收后,還不夠進行本次堆外內(nèi)存分配的話,則進行 GC 操作:

System.gc() 會觸發(fā)一個 Full GC,當然,前提是你沒有顯示的設(shè)置 - XX:+DisableExplicitGC 來禁用顯式 GC。同時,需要注意的是,調(diào)用 System.gc() 并不能夠保證 Full GC 馬上就能被執(zhí)行。

調(diào)用 System.gc() 后,接下來會最多進行 9 次循環(huán)嘗試,仍然通過 tryReserveMemory 方法來判斷是否有足夠的堆外內(nèi)存可供分配操作。每次嘗試都會 sleep,以便 Full GC 能夠完成,如下代碼所示。

4. 最不幸的情況,經(jīng)過 9 次循環(huán)嘗試后,如果仍然沒有足夠的堆外內(nèi)存,將拋出 OutOfMemoryError 異常。

綜上所述,Bits.reserveMemory(size, cap) 方法將依次執(zhí)行以下操作:

1.如果可用堆外內(nèi)存足以分配給當前要創(chuàng)建的堆外內(nèi)存大小時,直接返回 True;

2.如果堆外內(nèi)存不足,則觸發(fā)一次非堵塞的 Reference#tryHandlePending(false)。該方法會將已經(jīng)被 JVM 垃圾回收的 DirectBuffer 對象的堆外內(nèi)存釋放;

3.如果進行一次堆外內(nèi)存資源回收后,還不夠進行本次堆外內(nèi)存分配的話,則進行 System.gc()。

System.gc() 會觸發(fā)一個 Full GC,需要注意的是,調(diào)用 System.gc() 并不能夠保證 Full GC 馬上就能被執(zhí)行。

所以在后面打代碼中,會進行最多 9 次嘗試,看是否有足夠的可用堆外內(nèi)存來分配堆外內(nèi)存。

并且每次嘗試之前,都對延遲等待時間,已給 JVM 足夠的時間去完成 Full GC 操作。

4.如果 9 次嘗試后依舊沒有足夠的可用堆外內(nèi)存來分配本次堆外內(nèi)存,則拋出 OutOfMemoryError(“Direct buffer memory”) 異常。

3.2 第二個重要方法:

unsafe.allocateMemory(size)

......

3.3 第三個重要方法:

Cleaner.create(this, new Deallocator(base, size, cap))

......

責任編輯:武曉燕 來源: GitChat精品課
相關(guān)推薦

2017-02-05 16:00:35

Java編程語言

2016-12-26 17:53:05

Java開發(fā)者編程語言

2017-01-15 17:48:04

Java開發(fā)者編程語言

2022-10-26 07:21:15

網(wǎng)絡(luò)視頻開發(fā)

2016-08-05 16:28:05

javascripthtml前端

2017-06-26 15:32:59

前端編譯原理語言知識

2021-05-10 10:01:04

JavaScript開發(fā)技巧

2013-04-19 09:23:34

2013開發(fā)者開發(fā)趨勢和技能

2011-09-20 09:27:50

Web

2020-03-04 11:20:22

DSL開發(fā)領(lǐng)域特定語言

2012-02-06 09:14:24

2012-06-27 09:11:47

2020-04-03 09:00:00

微服務(wù)前端架構(gòu)

2011-04-01 11:16:06

hessian

2012-06-26 10:13:55

2018-09-29 15:27:05

BinderAPPAndroid

2021-02-07 09:02:28

內(nèi)存管理length

2013-07-10 11:11:05

PythonGo語言

2014-12-15 10:25:21

移動開發(fā)像素設(shè)計

2017-10-12 18:42:08

前端HTML5基礎(chǔ)知識
點贊
收藏

51CTO技術(shù)棧公眾號

不卡的av中国片| 精品成a人在线观看| 91欧美视频网站| 亚洲女同av| 香蕉av福利精品导航| 偷拍视频一区二区| 中文字幕亚洲在线观看| 欧美岛国在线观看| 粗大的内捧猛烈进出在线视频| 国产美女在线精品| 国产精品视频免费一区二区三区| 欧美日韩黄色| 亚洲国产另类久久精品| 免费国产视频| 91麻豆产精品久久久久久| 久久综合九色综合久99| 亚洲综合色激情五月| 亚洲女同精品视频| 国产精品视频福利| 精品成人免费一区二区在线播放| 亚洲精品国久久99热| 亚洲人成网站在线播放2019| 欧美黑人做爰爽爽爽| 日韩成人中文电影| av在线免费观看网址| 日本韩国精品一区二区在线观看| 7777在线视频| 青青国产91久久久久久| 5566中文字幕一区二区| 国产91精品对白在线播放| 日韩女优在线播放| 精品精品久久| 国产成人综合精品| 波多野结衣在线一区二区| 欧美精品中文字幕一区| 精品免费av在线| 中文字幕亚洲欧美一区二区三区 | 影音先锋在线一区| 久久精品二区| 日韩精品欧美精品| 在线观看欧美激情| 91在线精品一区二区| www成人免费观看网站| 一区二区三区在线视频免费观看| 男同在线观看| 日韩精品久久久久久福利| 高清国产一区二区三区四区五区| 国产精品久久久久久久9999| 国产精品中文字幕亚洲欧美| 日韩精品不卡| 中文字幕 久热精品 视频在线| 中国动漫在线观看完整版免费| 91精品国产手机| 91精品啪在线观看国产手机 | 色综合欧美在线| 久久久精彩视频| 99久久精品国产毛片| 噼里啪啦在线中文观看| 精品欧美国产一区二区三区| 亚洲伊人第一页| 国产精品色噜噜| 盗摄系列偷拍视频精品tp| 色片在线免费观看| 国产盗摄xxxx视频xxx69| 色综合久久久久综合99| 中文欧美日韩| 成人精品高清在线视频| 乱小说综合网站| 51午夜精品| 精品亚洲男同gayvideo网站| 91浏览器在线视频| 欧美oldwomenvideos| 51精品在线| 国产成人一区二区三区| 亚洲精品自拍动漫在线| 亚洲东热激情| 国产国产一区| 最新av番号| 欧美精品v日韩精品v国产精品| 日韩一区二区三区免费观看| 国产精品123| 成人性生交大片免费看中文视频| 伊人75在线| 一区二区免费在线视频| 欧美日本国产在线| 欧美影院一区二区| 99久久精品国产麻豆演员表| 自拍视频在线网| www.av一区视频| 日韩av在线影院| 国产日韩欧美a| 国产一区二区三区不卡视频网站| 国产日韩精品在线看| 国产亚洲福利社区| 亚洲第一网站男人都懂| 久久福利视频一区二区| 粉嫩一区二区三区在线观看| av毛片免费| 色综合电影网| 欧美日韩成人网| 日本道在线观看一区二区| 久久国产剧场电影| 精品视频高潮| 韩国精品一区| 国产农村av| 无遮挡亚洲一区| 97在线观看免费| 欧美成人欧美edvon| 成人免费在线视频| 天堂久久一区二区三区| 另类尿喷潮videofree| 天堂av在线电影| 李宗瑞系列合集久久| 久久国产午夜精品理论片最新版本| 国产精品自产拍在线观看| 精品丝袜一区二区三区| 激情亚洲一区二区三区四区| 国产乱码精品一区二区三区av| 亚洲破处大片| 色婷婷狠狠五月综合天色拍 | 日韩有码一区二区三区| 久久综合亚洲| 国产一区二区久久久久| 91桃色在线| 精品自拍一区| 在线午夜视频| 免费在线黄网| 羞羞免费视频网站| 又色又爽又高潮免费视频国产| 日韩理论片在线观看| www 成人av com| 亚洲影院在线看| 爱情岛论坛亚洲入口| 国产欧美一区二区三区久久| 日韩av成人在线观看| 久久免费高清视频| 欧美激情高清视频| 韩国19禁主播vip福利视频| 久久夜色精品国产| 欧美激情一级二级| 欧美在线激情视频| 国产男女猛烈无遮挡91| 国产热re99久久6国产精品| 国产精品成人国产乱一区| 日本在线精品视频| 国产精品视频免费在线| 91老司机在线| 欧美一区二区三区成人久久片 | 性欧美gay| aaa国产精品视频| 日韩夫妻性生活xx| 99pao成人国产永久免费视频| 亚洲乱码视频| 成人的网站免费观看| 亚洲精品高清在线观看| 在线免费观看视频一区| 亚洲精品一区二区网址| 欧美亚洲一级片| 久久99精品久久久久久水蜜桃| 少妇久久久久久被弄到高潮| 97影院理论午夜| 在线中文字幕视频观看| 99久久香蕉| 亚洲综合精品四区| 麻豆蜜桃在线| 欧美三级午夜理伦三级| 黄在线观看网站| 成人在线高清免费| 欧美一区亚洲| 在线观看视频一区二区欧美日韩| 欧美风情在线观看| 热99这里只有精品| 亚洲成人人体| 国产一区二区三区免费看| 日韩欧美一二区| 五月婷婷一区| 亚洲妇女成熟| 麻豆精品一区二区三区| 欧美精品一级二级| 成人疯狂猛交xxx| 四虎影院在线播放| 成人一区二区| 国产精品久久毛片a| 美日韩丰满少妇在线观看| 日本大片免费看| 日本高清成人vr专区| 麻豆精品久久久| 国产一区二区三区免费视频| 中文久久久久久| 夜夜躁狠狠躁日日躁2021日韩| 久久久不卡网国产精品二区| 国内成人精品视频| av五月天在线| 成人香蕉社区| 精品日韩视频在线观看| 国内视频一区二区| 蜜桃精品在线| 亚洲国产日日夜夜| 米仓穗香在线观看| 欧美精品国产|