java bytebuffer回收_java之HeapByteBuffer&DirectByteBuffer以及回收DirectByteBuffer | 學步園

byte buffer一般在網路交互過程中java使用得比較多,尤其是以NIO的框架中;

看名字就知道是以位元組碼作為緩衝的,先buffer一段,然後flush到終端。

而本文要說的一個重點就是HeapByteBuffer與DirectByteBuffer,以及如何合理使用DirectByteBuffer。

1、HeapByteBuffer與DirectByteBuffer,在原理上,前者可以看出分配的buffer是在heap區域的,其實真正flush到遠程的時候會先拷貝得到直接內存,再做下一步操作(考慮細節還會到OS級別的內核區直接內存),其實發送靜態文件最快速的方法是通過OS級別的send_file,只會經過OS一個內核拷貝,而不會來回拷貝;在NIO的框架下,很多框架會採用DirectByteBuffer來操作,這樣分配的內存不再是在java

heap上,而是在C heap上,經過性能測試,可以得到非常快速的網路交互,在大量的網路交互下,一般速度會比HeapByteBuffer要快速好幾倍。

最基本的情況下

分配HeapByteBuffer的方法是:

ByteBuffer.allocate(int capacity);參數大小為位元組的數量

分配DirectByteBuffer的方法是:

ByteBuffer.allocateDirect(int capacity);//可以看到分配內存是通過unsafe.allocateMemory()來實現的,這個unsafe默認情況下java代碼是沒有能力可以調用到的,不過你可以通過反射的手段得到實例進而做操作,當然你需要保證的是程序的穩定性ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值