第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ByteBuffer 內(nèi)存分配

ByteBuffer 內(nèi)存分配

滄海一幻覺 2021-10-28 17:18:39
我試圖了解DirectByteBufferLinux 上的工作原理并編寫了以下非常簡單的程序以在 strace 下運行:public static void main(String[] args){    while(true){        ByteBuffer buffer = ByteBuffer.allocateDirect(8192);    }}我期望實際上一些mmap或sys_brk系統(tǒng)調(diào)用直接從操作系統(tǒng)分配內(nèi)存,但實際上它只是設(shè)置了請求頁面的讀寫保護。我的意思是這樣的:mprotect(0x7fa9681ef000, 8192, PROT_READ|PROT_WRITE) = 0這似乎是分配直接緩沖區(qū)比分配堆緩沖區(qū)慢的原因,因為每次分配都需要系統(tǒng)調(diào)用。如果我錯了,請糾正我,但堆緩沖區(qū)分配(如果發(fā)生在 TLAB 內(nèi))相當于返回一個指向預分配堆內(nèi)存的指針。問題:為什么我們不能對直接內(nèi)存做同樣的事情?返回一個指向預分配內(nèi)存的指針?
查看完整描述

1 回答

?
RISEBY

TA貢獻1856條經(jīng)驗 獲得超5個贊

在 Oracle/OpenJDK 中,ByteBuffer.allocateDirect(n)使用Unsafe.allocateMemory(n)在 Linux 上調(diào)用malloc

在 Linux 上,malloc 從內(nèi)存池中分配較小的分配,例如 8KB,但是,對于 128 KB 或更多的分配,它會添加一個新的mmap.

我實際上期望一些 mmap 或 sys_brk 系統(tǒng)調(diào)用直接從操作系統(tǒng)分配內(nèi)存

嘗試一次分配128 << 10或 128 KB。

這似乎是分配直接緩沖區(qū)比分配堆緩沖區(qū)慢的原因,因為每次分配都需要系統(tǒng)調(diào)用。

系統(tǒng)調(diào)用增加了大約 2 微秒。不打算經(jīng)常分配和釋放直接的 ByteBuffer。您應(yīng)該找到重用這些緩沖區(qū)的方法。

如果我錯了,請糾正我,但堆緩沖區(qū)分配(如果發(fā)生在 TLAB 內(nèi))相當于返回一個指向預分配堆內(nèi)存的指針。

正確的。本機內(nèi)存中較小的分配使用本機堆。

問題:為什么我們不能對直接內(nèi)存做同樣的事情?

確實如此。

返回一個指向預分配內(nèi)存的指針?

它不會為 128 KB+ 執(zhí)行此操作以將內(nèi)存釋放回操作系統(tǒng)。


查看完整回答
反對 回復 2021-10-28
  • 1 回答
  • 0 關(guān)注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號