Direct ByteBuffer學習

?ByteBuffer有兩種一種是heap ByteBuffer,該類對象分配在JVM的堆內存里面,直接由Java虛擬機負責垃圾回收,一種是direct ByteBuffer是通過jni在虛擬機外內存中分配的。通過jmap無法查看該快內存的使用情況。只能通過top來看它的內存使用情況。

JVM堆內存大小可以通過-Xmx來設置,同樣的direct?ByteBuffer可以通過-XX:MaxDirectMemorySize來設置,此參數的含義是當Direct ByteBuffer分配的堆外內存到達指定大小后,即觸發Full GC。注意該值是有上限的,默認是64M,最大為sun.misc.VM.maxDirectMemory(),在程序中中可以獲得-XX:MaxDirectMemorySize的設置的值。

    @Testpublic void testBits() throws ClassNotFoundException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
//        System.out.println("maxMemoryValue:"+sun.misc.VM.maxDirectMemory()); ByteBuffer buffer=ByteBuffer.allocateDirect(0);Class c = Class.forName("java.nio.Bits");  Field maxMemory = c.getDeclaredField("maxMemory");  maxMemory.setAccessible(true);  synchronized (c) {  Long maxMemoryValue = (Long)maxMemory.get(null);  System.out.println("maxMemoryValue:"+maxMemoryValue);  }  }

下面要談到垃圾回收機制:direct?ByteBuffer通過full gc來回收內存的,direct?ByteBuffer會自己檢測情況而調用system.gc(),但是如果參數中使用了DisableExplicitGC那么就無法回收該快內存了,-XX:+DisableExplicitGC標志自動將System.gc()調用轉換成一個空操作,就是應用中調用System.gc()會變成一個空操作。那么如果設置了就需要我們手動來回收內存了

    @Testpublic void testAllocateDirector() throws Exception{ByteBuffer buffer=ByteBuffer.allocateDirect(1024);Field cleanerField = buffer.getClass().getDeclaredField("cleaner");cleanerField.setAccessible(true);Cleaner cleaner = (Cleaner) cleanerField.get(buffer);cleaner.clean();}

那么除了FULL GC還有別的能回收direct?ByteBuffer嗎?CMS GC會回收Direct ByteBuffer的內存,CMS主要是針對old space空間的垃圾回收。但是是Oracle JDK 6u32以后的版本

?

講了這么多談下使用場景

1:多用網絡編程中用到,實現zero copy,數據不需要再native memory和jvm memory中來回copy

2:由于造和析構Direct?Buffer時間成本高,建議使用緩沖池,參見netty的實現

轉載于:https://www.cnblogs.com/gaoxing/p/4302088.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259343.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259343.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

魔獸爭霸Ⅲ運行時不能初始化directX的錯誤解決

運行魔獸爭霸3不能初始化DirectX錯誤這樣解決: 1:在運行中輸入(winr):dxdiag,查看顯示欄,確定電腦已安裝好directx 8.1以上,且下面的三個加速都已開啟。 2:如果沒有安裝directx就下載安裝一個&a…

Android7.0占用空間,Android7.0 開發者注意事項

1、當設備處于充電狀態且屏幕已關閉一定時間后,設備會進入低電耗模式并應用第一部分限制:關閉應用網絡訪問、推遲作業和同步。如果進入低電耗模式后設備處于靜止狀態達到一定時間,系統則會對 PowerManager.WakeLock、AlarmManager 鬧鈴、GPS …

Android探索之旅 | 面向對象和Java基礎

-- 作者 謝恩銘 轉載請注明出處 上一篇 Android探索之旅 | Android簡介 中說到: "Android的默認開發語言是Java,入門簡單。而且,你的Java水平不需要多好就可以上手開發Android App了。" 不少朋友說看到后很是心安。 不過小編也不想…

DataGirdView 編輯項時的驗證

dgvConfig.DataSource CreateTable();dgvConfig.Columns["編號"].ReadOnly true; //只讀dgvConfig.AllowUserToAddRows false; //不允許添加新行dgvConfig.EditingControlShowing new DataGridViewEditingControlShowingEventHandler(dgvConfig_EditingControlS…

使用Vitamio打造自己的Android萬能播放器(7)——在線播放(下載視頻)

前言 本章將實現非常實用的功能——下載在線視頻。涉及到多線程、線程更新UI等技術,還需思考產品的設計,如何將新加的功能更好的融入到現有的產品中,并不是簡單的加一個界面就行了,歡迎大家交流產品設計和技術細節實現&#xff01…

生成0到1之間隨機數的C代碼

#include <stdlib.h>#include <stdio.h>#include <time.h>int main(){srand((unsigned)time(NULL));int i;double r;for(i0;i<50;i){r(float)rand()/RAND_MAX; printf("%f\n",r);}return 0;}

HTML聲明文檔類型后樣式出錯,doctype如何聲明

如何doctype聲明&#xff0c;新增的結構元素和功能元素HTML5已形成了最終的標準&#xff0c;概括來講&#xff0c;它主要是關于圖像&#xff0c;位置&#xff0c;存儲&#xff0c;多任務等功能的增加。 新增的元素有繪畫 canvas &#xff0c;用于媒介回放的 video 和 audio 元素…

Error-Project facet Java version 1.8 is not supported

最近導入最新的Strtus2.5.10.1 Demo時出現了這個錯誤 解決方案如下&#xff1a; 選中工程——右鍵——Properties 然后依次展開找到如圖所示內容&#xff0c;將1.8改成1.7即可。 原因&#xff1a;工程默認配置是1.8&#xff0c;而本地環境JDK版本為1.7&#xff0c;兩則不匹配造…

6.2

轉載于:https://www.cnblogs.com/tutuaixiaomei/p/3354356.html

Tomcat全攻略

內容&#xff1a; 一&#xff1a;簡單介紹二&#xff1a;安裝及配置三&#xff1a;應用四&#xff1a;綜述參考資料關于作者宗 鋒西北大學計算機系碩士2001 年 12 月 隨著java的流行&#xff0c;其在web上的應用也越來越廣&#xff0c;tomcat作為一個開源的servlet容器&#xf…

《G檔案》中關于游戲程序設計的文章

剛拿到前導的《G檔案》&#xff0c;發現了主程劉剛的文章&#xff0c;是目前我所見 到的關于游戲編程的最好的一篇&#xff0c;與大家共享。轉載&#xff1a;http://www.360doc.cn/article/2778_53476.html PC游戲編程 目錄 1 游戲程序理論 1.1 技術基礎 1.2 游戲底層 1.3 編…

shell筆記

system 磁盤 磁盤空間使用情況df查看文件或目錄大小du掛載usb sudo fdisk -l # Find what the drive is called e.g. /dev/sdb1 sudo mkdir /media/usb sudo mount /dev/sdb1 /media/usb sudo umount /media/usb# umount sudo umount /media/usb utils awk 打印文件的第一列(域…

html5編輯文檔,HTML5帶各種趣味動畫的文本編輯器

CSS語言&#xff1a;CSSSCSS確定body {background-color: #eee;}html,body {margin: 0px;height: 100%;overflow: hidden;}.toolbar {width: 100%;background: #fff;padding: 4px 10px;}.characters {display: inline-block;margin-right: 20px;vertical-align: top;}.characte…

社會轉型

轉載&#xff0c;版權由作者所有。 常常在政府工作報告中看到關于“社會轉型期”的說法&#xff0c;不是太明白&#xff0c;在百度里找了找&#xff0c;果然有不少&#xff0c;摘抄下來&#xff0c;做為學習資料用&#xff1a; 一是指體制轉型&#xff0c;即從計劃經濟體制向市…

在WPF中處理Windows消息

在Winform中 處理Windows消息通過重寫WndProc方法 在WPF中 使用的是System.Windows. Sytem.Windows.Controls等名字空間&#xff0c;沒有WndProc函數 WPF中處理消息首先要獲取窗口句柄&#xff0c;創建HwndSource對象 通過HwndSource對象添加消息處理回調函數。 此外 WPF中沒有…

Android Material風格的應用(三)--DrawerLayout

添加抽屜導航 Android Material風格的應用(一)--AppBar TabLayoutAndroid Material風格的應用(二)--RecyclerViewAndroid Material風格的應用(三)--DrawerLayoutAndroid Material風格的應用(四)--FloatActionButtonAndroid Material風格的應用(五)--CollapsingToolbar DrawerLa…

html5 數據緩存,HTML5: 本地緩存

HTML5 提供了兩種在客戶端存儲數據的新對象&#xff1a;localStorage&#xff1a;沒有時間限制的數據存儲&#xff0c;在同一個瀏覽器中&#xff0c;只要沒被手動清理&#xff0c;第二天、第二周或下一年之后&#xff0c;數據依然可用。sessionStorage&#xff1a;針對一個 ses…

C# 委托:把方法組合到一個數組中使用

C# 委托&#xff1a;把方法組合到一個數組中使用 using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApplication1 {class MathOperations{public static double MultiplyByTwo(double value){return value * 2;}public…

上傳Text文檔并轉換為PDF

今天在ASP.NET MVC環境中學習一些PDF相關的知識&#xff0c;想法是上傳文件成功時&#xff0c;并把文件轉換為PDF文檔。 打開你的專案&#xff0c;運行NuGet包管理器&#xff0c;下載一個叫iTextSharp的東東&#xff1a;點擊Install&#xff0c;按鈕提示確認安裝&#xff0c;成…

某著名公司2015暑期實習招聘試題及相關內容復習

1.&#xff09;輸出下面的結果<pre name"code" class"cpp">#include <iostream> using namespace std;int main(int argc, char *argv[]) {int **a[5][4];int *b[5][4];int *c[5];int d[5][4];char *e"helloworld";char g[]"01…