많은 스레드가 정확히 동일한 파일 (크기가 1GB 이상)을 읽고이를 입력 스트림으로 표시해야하는 Java 다중 스레드 응용 프로그램의 효율적인 방법은 무엇입니까? 나는 많은 스레드 (> 32)가있는 경우 시스템이 I/O를 경유하기 시작하고 많은 I/O 대기를 가지고 있음을 발견했습니다.하나의 큰 파일을 읽는 Java 다중 스레드
모든 스레드가 공유하는 바이트 배열에 파일을로드하는 것을 고려했습니다. 각 스레드는 ByteArrayInputStream을 만들지 만 1GB 바이트 배열을 할당하면 제대로 작동하지 않습니다.
또한 하나의 FileChannel과 각 스레드가 Channels.newInputStream()을 사용하여 InputStream을 작성하는 것으로 간주했지만 입력 스트림의 상태를 유지하는 것은 FileChannel 인 것으로 보입니다.
각 스레드가 파일의 전체 내용을 필요로합니까? 또는 각각은 필요한 관련 데이터를 찾을 수 있습니까? –
각 스레드는 전체 파일을 읽어야합니다. – bob
시스템에는 8GB의 메모리가 있으며 1GB 어레이를 할당해도 괜찮습니다. 그러나 JVM은 이것을 좋아하지 않는다. 100 % cpu를 사용하여 어레이를 오랫동안 할당하려고한다. – bob