您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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应用程序非常繁忙。我也做了微观基准和现实基准。结果在我的博客上,看看:

使用生产数据和环境

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

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

你在做什么?这很重要。

java 2022/1/1 18:24:22 有458人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶