什麼是Java多線程應用程序的有效方式,其中許多線程必須讀取完全相同的文件(大小大於1GB)並將其作爲輸入流公開?我注意到,如果有很多線程(> 32),系統開始爭奪I/O並且有很多I/O等待。閱讀單個大文件的Java多線程
我曾考慮將文件加載到所有線程共享的字節數組中 - 每個線程都會創建一個ByteArrayInputStream,但分配一個1GB的字節數組效果不佳。
我也考慮過使用單個FileChannel,每個線程使用Channels.newInputStream()在它上面創建一個InputStream,但是它似乎是維護InputStream狀態的FileChannel。
每個線程是否需要文件的全部內容?或者每個人都可以尋求它需要的相關數據? – 2009-10-10 06:37:05
每個線程需要讀取整個文件。 – bob 2009-10-10 22:06:04
該系統有8GB的內存,我不介意分配1GB的陣列。但是JVM似乎並不喜歡這樣 - 它使用100%cpu試圖分配數組很長時間。 – bob 2009-10-10 22:08:18