[分享] java nio performance tuning

看板java作者 (dryman)時間11年前 (2013/10/03 13:45), 編輯推噓5(506)
留言11則, 8人參與, 最新討論串1/6 (看更多)
http://www.idryman.org/blog/2013/09/28/java-fast-io-using-java-nio-api/ 最近換工作,開始寫hadoop & java 學了一些新東西就開始寫java相關的部落格文章了 這一篇是我用java nio把一個資料讀取的時間從194秒壓到0.16秒 底層API的威力果然不同凡響啊... 簡而言之,java nio是 New IO 的縮寫 裡面支援bulk copy還有asynchronous read/write 如果有用C寫過fread, fseek, rewind等功能的話 對nio的介面應該會感到相當熟悉 我只有用到基本的bulk copy 進階的mmap或是async io因為效能目標已經達到就沒研究了 範例code長這樣:(syntax highlight請進blog看) public static void readIPFromNIO() throws IOException{ FileInputStream fis = new FileInputStream(new File("ip.bin")); FileChannel channel = fis.getChannel(); ByteBuffer bb = ByteBuffer.allocateDirect(64*1024); bb.clear(); ipArr = new int [(int)channel.size()/4]; System.out.println("File size: "+channel.size()/4); long len = 0; int offset = 0; while ((len = channel.read(bb))!= -1){ bb.flip(); //System.out.println("Offset: "+offset+"\tlen: "+len+"\tremaining:"+bb.hasRemaining()); bb.asIntBuffer().get(ipArr,offset,(int)len/4); offset += (int)len/4; bb.clear(); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 108.205.154.230

10/03 14:25, , 1F
推NIO o_o
10/03 14:25, 1F

10/03 14:29, , 2F
比較舊的CPU是不是沒有DMA?
10/03 14:29, 2F

10/03 16:25, , 3F
要不要再想想看, 你前兩個比較組是不是真的那麼慢?
10/03 16:25, 3F

10/03 16:27, , 4F
消耗的時間,真的都在於 java.io 與 java.nio 的差距上嗎?
10/03 16:27, 4F

10/03 16:32, , 5F
這樣的數據真的有點聳動,我認為幾十倍的差距還是有的
10/03 16:32, 5F

10/03 16:42, , 6F
1212倍...
10/03 16:42, 6F

10/04 01:50, , 7F
NIO看來不錯用 ^^
10/04 01:50, 7F

10/06 16:08, , 8F
NIO是non-blocking IO 不是New IO...
10/06 16:08, 8F

10/06 17:05, , 9F
NIO確實是New IO唷
10/06 17:05, 9F

10/08 19:54, , 10F
大多數人用nio package都是為了non blocking才有此誤解
10/08 19:54, 10F

10/08 19:55, , 11F
我自己也是誤解了很長一段時間 XD nio包內很多東西
10/08 19:55, 11F
文章代碼(AID): #1IJGHUhr (java)
文章代碼(AID): #1IJGHUhr (java)