jdk源碼分析之ByteBuffer

ByteBuffer位於jdk源碼包java.nio中

通過對該源碼文件的註釋的閱讀可知該ByteBuffer具有如下的特點:
1、該buffer可以使用直接內存(操作系統內存,不受java虛擬機管理)和間接內存(jdk管理的內存,受java虛擬機管理)
PS(關於直接內存和間接內存的好處,網上搜索會出現很多,結論是直接內存比間接內存的I/O效率高,這僅限於在該buffer上有I/O操作,否則最好是使用間接內存,因爲直接內存不受虛擬機管理,容易出現內存泄漏,那爲什麼說直接內存的I/O效率要比間接內存高呢?這是因爲直接內存是操作系統管理的內存,I/O操作時屬於操作系統的,所以I/O操作可以直接在該塊內存上操作,然而間接內存是java虛擬機管理的,該塊內存在操作系統上的位置不可知[–如果java虛擬機能找到該內存在操作系統上的內存地址,也可以達到直接內存的效果–],所以I/O操作無法直接操作,需要java虛擬機將該塊內存拷貝到操作系統內存中,並把拷貝之後的地址交由I/O操作處理,所以這就是網上說的間接內存的I/O效率低下的原因

從源碼可以看出,直接內存是調用unsafe接口進行內存的分配,而間接內存是直接new的一個字節數組。

2、buffer視圖
這個概念到底是什麼意思呢,網上也有很多說明,但是個人推薦直接查看jdk源碼的文檔。
舉一個例子就能很好的明白buffer視圖的概念了
buffer的內容:公司的所有員工[小王,小張,小劉…]
buffer部分視圖:公司的部門[A部門{小王},B部門{小劉}…]

從C語言的角度來說,同一部分字節,根據不同的數據類型,解析爲不同的值,Union就是一個視圖的體現。

3、可以自定義字節序(大端小端)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章