Re: [分享] java nio performance tuning

看板java作者 (真肉)時間11年前 (2013/10/05 14:19), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串4/6 (看更多)
: ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 114.24.13.31 : → dryman:加入Buffer後2.375s 10/04 10:21 : → bitlife:建議把轉換整數部分去掉再比一次,這部分直覺佔2秒的大部分 10/04 10:43 : 推 dryman:不過我的目標就是要用(夠快)的速度載入整數啊XD 10/04 11:28 : → swpoker:thread? 10/04 11:28 : → bitlife:我的意思是如果實測結果是整數轉換佔絕大多數時間,那麼問 10/04 11:56 : → bitlife:題就不在於 java.io vs. java.nio, 而是java.io沒有(擴充) 10/04 11:58 : → bitlife:夠快的整數轉換功能 10/04 12:00 : 嗯, 懂你的意思. Strategy 1是將文字轉整數,會花些時間 : 補上 去除整數轉換的數據 : Strategy 2 是沒有整數轉換的, 和Strategy 3一樣, 都是直接取出成為int : ※ 編輯: AI3767 來自: 111.248.52.147 (10/04 20:14) : → bitlife:http://www.docjar.com/html/api/java/io/DataInputStream 10/04 21:00 : → bitlife:.java.html readInt() 是用<<來轉換的,另外想到一件事,測 10/04 21:02 : → bitlife:試不同策略前,應該要清cache,因為策略3快的有點可疑 XD 10/04 21:03 : readInt()這個我比較傾向認為是還原, 而不是轉換 : 不過, 為了慎重, 也再做了其它試驗, strategy 2和3 改為read byte 的方式 : 甚至連assignment也沒有了, 出來的數據如下 : S2: 1.966 秒; S3: 0.344秒 (修正, 原本0.14 秒是忘了加上迴圈) : : 至於cache的問題, 我比較不擔心, 因為測試是跑個幾次, 結果也是沒變 : 還有交叉執行, 以釐清是否有執行順序的因素存在 : 另外, buffer的大小部份, 我改用資料筆數為大小, 取得最好的緩衝能力 : 結論都是一樣的 XD : ※ 編輯: AI3767 來自: 111.248.52.147 (10/04 23:13) : → bitlife:看到這裏,java.io在本例中所多出來的overhead大概就是1.8s 10/04 23:33 : → sbrhsieh:S2:1.x s, S3:0.1x s 都是有 OS 層面的 cache 10/04 23:46 : → sbrhsieh:改為 read byte 部分可以多作說明嗎? 10/04 23:48 : 原本code是用 bb.asIntBuffer() 去取 int值 : 改成 迴圈並由 bb.get() 取byte值 : 補充: 前個 S3 讀byte的數據有誤, 必須加上迴圈讀取, 抱歉 0rz : ※ 編輯: AI3767 來自: 111.248.52.147 (10/05 00:44) : → sbrhsieh:請問改 read byte 作法還有沒有 compose int value 部分? 10/05 01:11 我來回應一下cache的問題好了 交叉連續跑10圈 這樣比較準確 nio 422 ms io 266 ms nio 15 ms io 250 ms nio 16 ms io 250 ms nio 16 ms io 234 ms nio 16 ms io 250 ms nio 15 ms io 250 ms nio 0 ms io 266 ms nio 0 ms io 250 ms nio 15 ms io 250 ms nio 16 ms io 250 ms 對象為超大檔案 1.60 GB (1,724,283,840 位元組) nio 24250 ms io 28890 ms nio 23375 ms io 22172 ms nio 23610 ms io 31593 ms nio 49750 ms io 30875 ms nio 26547 ms io 38219 ms nio 40906 ms io 29985 ms 其實也沒差多少了, 數據會飄應該是有其他應用程式在影響 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.23.135

10/05 15:22, , 1F
第二份數據看起來大有問題
10/05 15:22, 1F

10/05 17:32, , 2F
第二份後面應該被其他應用程式影響到
10/05 17:32, 2F

10/05 19:49, , 3F
是說 nio 和 io 的速度差不多嗎@@?
10/05 19:49, 3F

10/05 20:08, , 4F
我剛測了1.6g nio:io = 5.351:31.106 秒 = ="
10/05 20:08, 4F
文章代碼(AID): #1IJwz_44 (java)
文章代碼(AID): #1IJwz_44 (java)