栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java NIO FileChannel与FileOutputstream的性能/有用性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java NIO FileChannel与FileOutputstream的性能/有用性

我对大型文件的体验

java.nio
比更快
java.io
。 确实更快。 例如在> 250%的范围内。也就是说,我正在消除明显的瓶颈,我认为这可能会影响你的微基准测试。调查的潜在领域:

缓冲区大小。 你基本上拥有的算法是

  • 从磁盘复制到缓冲区
  • 从缓冲区复制到磁盘

我自己的经验是,此缓冲区大小已经可以调整。我为应用程序的一部分分配了4KB,为另一部分分配了256KB。我怀疑你的代码正在遭受如此大的缓冲区。使用1KB,2KB,4KB,8KB,16KB,32KB和64KB的缓冲区运行一些基准测试以向自己证明。

不要执行读写同一磁盘的Java基准测试。

如果这样做,那么你实际上是在对磁盘进行基准测试,而不是对Java进行基准测试。我还建议,如果你的CPU不忙,那么你可能会遇到其他瓶颈。

如果不需要,请不要使用缓冲区。

如果目标是其他磁盘或NIC,为什么还要复制到内存中?对于较大的文件,确保的延迟是不平凡的。

就像其他人所说的那样,请使用

FileChannel.transferTo()
FileChannel.transferFrom()
。此处的主要优点是,JVM使用操作系统对DMA(直接内存访问)的访问(如果存在)。(这取决于实现方式,但是可以在通用CPU上使用现代的Sun和IBM版本。) 发生的情况是数据直接往返于磁盘,总线,然后直接到达目标……绕过任何电路RAM或CPU。

我日夜不停地工作的Web应用程序非常繁忙。我也做了微观基准和现实基准。结果在我的博客上,看看:

  • 实际性能指标:java.io与java.nio
  • 实际性能指标:java.io与java.nio(续集)

使用生产数据和环境

微观基准易于失真。如果可以,请根据预期的负载,在预期的硬件上,按照计划要做的事情来收集数据。

我的基准是可靠且可靠的,因为它们是在生产系统,强大的系统,有负载的系统以及日志中收集的。 而不是我笔记本的7200 RPM 2.5英寸SATA驱动器,而当我密切关注JVM在硬盘上工作时。

你在做什么?这很重要。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411066.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号