第12讲 | Java有几种文件拷贝方式?哪一种最高效?
该思维导图由 AI 生成,仅供参考
典型回答
考点分析
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了Java文件拷贝方式及其效率比较,重点介绍了利用java.io和java.nio类库进行文件拷贝的方式。在实际效率比较中,NIO的transferTo/From方式可能更快,因为它更能利用现代操作系统底层机制,避免不必要的拷贝和上下文切换。然而,实际的效率受操作系统和配置等因素影响,因此并不是绝对的。此外,文章还提到了面试角度的考察点和技术细节,强调了对底层机制和技术细节的了解和思考的重要性。另外,还介绍了拷贝实现机制分析、Java IO/NIO源码结构、掌握NIO Buffer、Direct Buffer和垃圾收集以及跟踪和诊断Direct Buffer内存占用等内容。总的来说,本文为读者提供了全面的技术知识和实践经验,对于Java文件拷贝方式的选择,读者需要综合考虑实际情况和需求,同时也需要对底层机制和技术细节有一定的了解和思考。
《Java 核心技术面试精讲》,新⼈⾸单¥59
全部留言(55)
- 最新
- 精选
- 行者可以利用NIO分散-scatter机制来写入不同buffer。 Code: ByteBuffer header = ByteBuffer.allocate(128); ByteBuffer body = ByteBuffer.allocate(1024); ByteBuffer[] bufferArray = {header, body}; channel.read(bufferArray); 注意:该方法适用于请求头长度固定。
作者回复: 赞
2018-05-313131 - 13576788017杨老师,想问一下,一般要几年java经验才能达到看懂你文章的地步??我将近一年经验。。我发现我好几篇都看不懂。。底层完全不懂。。是我太菜了吗。。
作者回复: 非常抱歉,具体哪几篇?公司对一年经验的工程师要求应该也不一样的
2018-05-3120128 - 乘风破浪零拷贝是不是可以理解为内核态空间与磁盘之间的数据传输,不需要再经过用户态空间?
作者回复: 嗯
2018-05-3153 - 夏洛克的救赎请问老师您有参与jdk的开发吗
作者回复: 是的,目前lead的团队主要是QE职责
2018-05-3121 - CC我Nio从没接触过,很难受,两年开发的
作者回复: 不用担心,是理解有难度吗?
2018-06-0717 - vash_ace其实在初始化 DirectByteBuffer对象时,如果当前堆外内存的条件很苛刻时,会主动调用 System.gc()强制执行FGC。所以一般建议在使用netty时开启XX:+DisableExplicitGC
作者回复: 对,检测不够时会尝试调system.gc,记得老版本有并发分配bug,会出oom;netty,文中提到了,它是hack到内部自己释放...
2018-06-01316 - mongo杨老师,我也想请教,目前为止您的其他文章都理解的很好,到了上次专栏的NIO我理解的不是很好,今天的这篇可以说懵圈了。到了这一步想突破,应该往哪个方向?我自己感觉是因为基于这两个底层原理的上层应用使用的时候观察的不够深入,对原理反应的现象没有深刻感受,就是所谓还没有摸清楚人家长什么样。所以接下来我会认真在使用基于这些原理实现的上层应用过程中不断深挖和观察,比如认真学习dubbo框架(底层使用到了netty,netty的底层使用了NIO)来帮助我理解NIO。在这个过程中促进对dubbo的掌握,以此良性循环。不知道方向对不对?老师的学习方法是什么?请老师指点避坑。学习方法不对的话时间成本太可怕。
作者回复: 我觉得思路不错,结合实践是非常好的;我自身也仅仅是理论上理解,并没有在大规模实践中踩坑,实践中遇到细节的“坑”其实是宝贝,所以你有更多优势;本文从基础角度出发,也是希望对其原理有个整体印象,至少被面试刨根问底时,可以有所准备,毕竟看问题的角度是不同的
2018-05-3114 - Len请教老师: 1. 经常看到 Java 进程的 RES 大小远超过设置的 Xmx,可以认为这就是 Direct Memory 的原因吗?如果是的话,可以简单的用堆实际占用的大小减去 RES 就是 Direct Memory 的大小吗? 2.可以认为 Direct Memory 不论在什么情况下都不会引起 Full GC,Direct Memory 的回收只是在 Full GC (或调用 System.gc())的时候顺带着回收下,是吗?
作者回复: 1,一般不是,那东西有个默认大小的,metaspace codecache等等都会占用,后面有章节仔细分析 2,不是,它是利用sun.misc.Cleaner, 实际表现有瑕疵,经常要更依赖system gc去触发引用处理,9和8u有改进,我会有详解
2018-05-319 - 老陈板本篇文章有恍然大悟的感觉,前面段时间有一家面试问了个这样的问题,我们发现服务器内存使用得特别高,但是堆内存也比较稳定,这种场景是你你会怎么排查?这里就涉及到堆外内存相关的问题!以前不知道有NMT这个工具,然后当时没答好,导致工资少了好多,早点读这篇文章多好。另外注意,sysyem.gc不一定会立即触发fgc,有个权值
作者回复: 一个常见例子是,创建了一堆线程,实际占用内存(RSS)远比堆本身大
2019-02-178 - 皮蛋杨老师,想问下如果想学操作系统的知识,阅读什么书比较适合,初学者
作者回复: 可以看看《深入理解计算机系统》,如果有精力,再找本linux内核并配合实验,会很有用
2018-11-028