I/O笔记

      虽然 异步和非阻塞能够提升I/O的性能,但是也会带来一些额外的性能成本,例如,会增加线程数量从而增加CPU的消耗,同时也会导致程序设计复杂度的上升。如果设计的不合理反而会导致性能下降,实际应用中需要根据应用场景综合评估。

     

     java NIO,引入了通道和缓冲区来执行I/O,NIO使用java.nio.ByteBuffer.allocateDirect()方法来分配内存。

NIO direct memory, 分配的内存是本机上的内存而不是java堆上的内存,调用os的os::malloc()函数。

 直接ByteBuffer产生的数据如果和网络或者磁盘交互都在操作系统的内核空间产生,不需要将数据复制到Java内存中,很显然执行这种I/O操作要比一般的从OS的内核空间到java堆上的切换操作快得多,因为他们可以避免在java堆与本机堆之间复制数据。

  直接ByteBuffer对象会自动清理本机缓冲区,但这个过程只能作为java堆GC的一部分来执行,因此他们不会自动响应施加在本机堆上的压力。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值