哇塞,这几种Java文件读写性能差距居然这么大?

引言

这是一篇性能比较的文章,不分析实现原理。主要是对比Java几种常见的文件写入方式

一、测试代码

主要分析Stream、Stream+Buffer和mmap三种方式,对应的大致代码如下

    public static void testBasicFileIO(List<Persona> list, String path) throws Exception {File file = new File(path);if (file.exists()){file.delete();}FileOutputStream out = new FileOutputStream(file);long startTime = System.currentTimeMillis();for (int i = 0; i < list.size(); i++) {out.write(list.get(i).toString().getBytes());}long costTime = System.currentTimeMillis()-startTime;System.out.println("testBasicFileIO cost:"+costTime);}public static void testBufferedFileIO(List<Persona> list, String path) throws Exception {File file = new File(path);if (file.exists()){file.delete();}BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));long startTime = System.currentTimeMillis();for (int i = 0; i < list.size(); i++) {out.write(list.get(i).toString().getBytes());}long costTime = System.currentTimeMillis()-startTime;System.out.println("testBufferedFileIO cost:"+costTime);}public static void testMmapWrite(List<Persona> list, String path) throws Exception {File file = new File(path);if (file.exists()){file.delete();}RandomAccessFile raf = new RandomAccessFile(path, "rw");FileChannel rafchannel = raf.getChannel();//mmap 使得jvm堆和pageCache有一块映射空间MappedByteBuffer map = rafchannel.map(FileChannel.MapMode.READ_WRITE, 0, 4096 * 1024 * 250);  // 1000M的pageCache大小long startTime = System.currentTimeMillis();for (int i = 0; i < list.size(); i++) {map.put(list.get(i).toString().getBytes());}long costTime = System.currentTimeMillis()-startTime;System.out.println("mmap cost:"+costTime);}

二、效果比较

写1M数据效果如下
在这里插入图片描述

写10M数据效果如下
在这里插入图片描述

写100M效果如下
在这里插入图片描述

三、总结

通过比较能看到在高频写数据到磁盘时,mmap的性能非常显著,有类似的场景时可以优先考虑mmap。当然最好是自己做下基准测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/448176.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】通讯录实现(下)

目录 1.进阶通讯录特点&#xff08;下&#xff09; 2.实现步骤 &#xff08;1&#xff09;保存增加的联系人数据到文件中 &#xff08;2&#xff09;加载保存的联系人数据 3.完整C语言通讯录代码 &#xff08;1&#xff09;contact.h (2)test.c (3)contact.c 4.结语 1.…

爬虫学习笔记-scrapy安装及第一个项目创建问题及解决措施

1.安装scrapy pycharm终端运行 pip install scrapy -i https://pypi.douban.com/simple 2.终端运行scrapy startproject scrapy_baidu,创建项目 问题1:lxml版本低导致无法找到 解决措施:更新或者重新安装lxml 3.项目创建成功 4.终端cd到项目的spiders文件夹下,cd scra…

微信支付介绍

目录标题 1 微信支付介绍2 微信支付准备工作2.1 如何保证数据安全&#xff1f;2.2 如何调用到商户系统&#xff1f; 3 代码模板3.1 微信支付相关配置3.2 Mapper层 3.3 微信支付工具类3.4 Service层3.5 Controller层 1 微信支付介绍 支付大家应该都不陌生了&#xff0c;在现实生…

C# 引用同一个dll不同版本的程序集

因为项目需要所以必须在项目中引用不同版本的同一程序集 我要引用的文件是newtonsoft.json.dll 两个版本为12.0.0.0 和4.0.0.0 1.如果已经先引入了newtonsoft.json 12.0.0.0版本的程序集&#xff0c;如果直接引入另一个版本的程序集的话会提示不成功&#xff0c;所以先将另一个…

【循环结构·js】

变量命名原则 变量名由字母、下划线、$ 或数字组成&#xff0c;并且必须由字母、下划线、$ 开头。 变量名不能命名为系统关键字和保留字。 JS代码在sourse里面调试 document.write(str); /*在页面上输出变量 str 的值*/数据类型的分类 为什么要标识数据类型&#xff1a; 不…

(2024,SaFaRI,双三上采样和 DFT,空间特征和频率特征)基于扩散模型的图像空间和频率感知恢复方法

Spatial-and-Frequency-aware Restoration method for Images based on Diffusion Models 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 方法 3.1 修改数据保真度 3.2 …

HBuilder使用[微信小程序开发者工具] 显示 × initialize报错

解决办法 我们先要单独打开 微信开发者工具 点击设置里面的安全,把服务器端口打开 然后再回到我们的HBuilder使用重新打开打开 成功打开

统计图表在线配置服务-百度 SugarBI的学习笔记

最近&#xff0c;有个产品要支持统计图表在线可配置&#xff0c;这样&#xff0c;当用户有新增统计指标的需求时&#xff0c;运维人员通过界面化配置&#xff0c;就可以增加统计指标了&#xff0c;不用开发写代码&#xff0c;画页面了。 上网查了下相关的组件&#xff0c;感觉…

滑动窗口最终弹

力扣30.串联所有单词的子串&#xff08;巨困难&#xff09; 这个最难的是什么 1.代码的编写 2.容器的使用 class Solution {List<Integer>retnew LinkedList<>();//保存字典中所有单词的频次public List<Integer> findSubstring(String s, String[] words) …

基于ecal的foxglove studio可视化工具的使用

ecal通讯在自动驾驶和机器人中的应用越来越多,在调试测试过程中,可以使用ecal monitor,ecal recoder和ecal player等工具,对ecal 消息进行监测录制回播。但是,有时候需要对消息进行可视化查看,比如雷达点云信息,相机图像等,可以使用foxglove studio可视化工具。 Foxg…

【开源】SpringBoot框架开发农村物流配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理&#xff1a;2.2.2 位置信息管理&#xff1a;2.2.3 配送人员分配&#xff1a;2.2.4 路线规划&#xff1a;2.2.5 个人中心&#xff1a;2.2.6 退换快递处理&#xff1a;…

机器学习_12_梯度下降法、拉格朗日、KKT

文章目录 1 梯度下降法1.1 导数、梯度1.2 梯度下降法1.3 梯度下降法的优化思想1.4 梯度下降法的调优策略1.5 BGD、SGD、MBGD1.5.1 BGD、SGD、MBGD的区别 2 有约束的最优化问题3 拉格朗日乘子法3.1 拉格朗日乘子法理解3.2 对偶问题 4 KKT条件4.1 KKT条件理解4.2 KKT公式理解4.3 …