У меня есть программа Java, которая просто считывает 12 Гбайт файлВремя, необходимое для чтения файла из буферного кэша жесткого диска или ОС или RAM-диска является почти таким же
Reader reader1 = new FileReader(filePath);
try (BufferedReader bufferedReader = new BufferedReader(reader1)) {
String line = bufferedReader.readLine();
while (line != null) {
line = bufferedReader.readLine();
}
}
Это занимает около 53 секунд, чтобы прочитать файл для первый раз.
Затем я проверил, был ли файл кэширован или нет, используя RAMMAP, файл полностью кэширован и находится в резервном списке.
Снова я запустил вышеуказанную программу, на этот раз это заняло около тех же 53 секунд. Почему производительность не улучшилась, даже когда файл завершен кэширован буфером ОС.
Я также создал RAM RAM, скопировал входной файл в RAM DISK, затем снова запустил вышеуказанный код, даже теперь это заняло около 54 секунд. Когда RAM IOPS намного быстрее, почему он здесь не отражается
Попробуйте запустить эту программу после перезагрузки ОС. Файл может быть кэширован даже при первой попытке. Другим вариантом является то, что ваш HD достаточно быстр для последовательных операций чтения, и это фактически обработка java readLine, которая является узким местом. Пожалуйста, посмотрите, как использовать java-программу для использования в Java при ее запуске. –
@ArturBiesiadowski, я очистил файл из кеша с помощью RAMMAP. Загрузка процессора составляет от 4 до 6%, это 2 процессора и 24 ядра. – i0707
Кажется, что процессор является узким местом. Попробуйте, возможно, разделить файл и загрузить его несколькими потоками параллельно? – gudok