更多課程 選擇中心
        Java培訓

        400-111-8989

        Java培訓 > Java教程  > 正文

        Java中多種寫文件方式的效率對比實驗

        • 發布:Java培訓
        • 來源:Java教程
        • 時間:2017-05-25 12:02

        Java中多種寫文件方式的效率對比實驗

        一、實驗背景

        最近在考慮一個問題:“如果快速地向文件中寫入數據”,java提供了多種文件寫入的方式,效率上各有異同,基本上可以分為如下三大類:字節流輸出、字符流輸出、內存文件映射輸出。前兩種又可以分為帶buffer及不帶buffer。

        二、實驗目標

        通過實驗找出單線程場景下文件寫入效率最高的方式,并量化各種文件寫入方式在效率上的差距。

        三、實驗設計

        為減少其他環節的影響,示例代碼使用循環輸出同一字符串多次的方式測試整個輸出環節的耗時,通過耗時、服務器資源使用情況(cpu、內存使用)等指標評判各種文件寫入方式的效率好壞。

        四、實驗環境

        OS: windows 7 64bit

        cpu: 4core, 主頻:2.4GHZ

        mem:6G

        jdk version:Java HotSpot(TM) 64-Bit ,1.8.0_101

        五、實驗步驟

        總共進行8次輸出實驗,依次輸出的文件大小為:10M、50M、100M、200M、500M、800M、1G、2G;

        每次輸出后記錄各種方式的耗時情況,并填表。

        、實驗結果

        表1、java各種文件寫入方法效率對比實驗時延數據表

        【Java中多種寫文件方式的效率對比實驗】

        表1、java各種文件寫入方法效率對比實驗時延結果圖(含大文件)

        【Java中多種寫文件方式的效率對比實驗】

        表2、java各種文件寫入方法效率對比實驗時延結果圖(不含大文件)

        【Java中多種寫文件方式的效率對比實驗】

        圖2、文件大小為2048m時,各個寫入方式執行任務時cpu使用情況:

        【Java中多種寫文件方式的效率對比實驗】

        圖3、文件大小為2048m時,各個寫入方式執行任務時jvm內存使用情況

        【Java中多種寫文件方式的效率對比實驗】

        圖4、文件大小為2048m時,各個寫入方式執行任務時物理內存使用情況:

        【Java中多種寫文件方式的效率對比實驗】

        上圖中紅圈中為‘FileChannel’方式下的物理內存使用情況。

        、實驗結論

        1、基本上,五種寫入方式的時延從小到大排序為:FileChannel

        2、在同樣文件大小寫入的場景中,通常意義上帶buffer的字節流輸入/字符流輸入比不帶buffer的對應流效率要高;

        3、各個寫入方式的jvm cpu和內存使用情況大致相當,從圖2和圖3可以看出;

        4、文件達到一定大小后( fileSize >=1.5G ),FileChannel的時延變得很大且不穩定,從圖1最右邊可以看出;同時,物理內存的使用量基本和寫入文件大小相當,從圖4可以看出;原因在于FileChannel使用MappedByteBuffer寫入,這個buffer是direct buffer,直接操作物理內存寫入,故而造成物理內存消耗嚴重。

        5、小文件寫入的場景下(1M左右),FileChannel有些大材小用了,效率上反而沒有字節流效率高。

        綜上,我們可以得到幾條有價值的使用經驗:

        1、小文件(幾M的文件)寫入時,使用常規的io輸入就行,最優選擇是BufferedInportStream,沒有必要使用nio的FileChannel;

        2、大文件(fileSize > 1G,這是個經驗值,需要根據具體環境具體分析)寫入時,使用FileChannel需要小心物理內存的瓶頸帶來的寫入效率低下,可以考慮使用分段寫入的方式(TODO:后續實驗給出);

        3、其他場景下,如果效率優先的考慮,則優先選擇FileChannel寫入文件。

        本文章由java培訓機構的小編轉載自網絡感謝大家的關注,如有侵權請聯系我們進行刪除

        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:Java I/O底層是如何工作的?
        下一篇:Java9又要遲到了發布時間將往后推遲八周
        • 掃碼領取資料

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        貴州省

        福建省

        • 達內廈門軟件園中心
        廣西省

        海南省

        国产高清情侣视频2019年,限制电影福利在线观看,23伊人大香蕉 百度 好搜 搜狗
        <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>