Я не уверен, что цена, которую вы видите, связана с операциями на диске или со строковыми манипуляциями. Сейчас я предполагаю, что проблема в строках, вы можете проверить это, написав тестовый драйвер, который запускает ваш код с одной и той же строкой снова и снова.
Я могу вам сказать, что split()
будет очень дорогой в вашем случае, потому что вы производите ненужные вам струны, а затем перерабатываете их, создавая много накладных расходов. Возможно, вы захотите увеличить объем пространства, доступного для вашей JVM, с -Xmx.
Если вы просто разделяете слова по наличию пробела, то вам будет гораздо лучше, если использовать сопоставление регулярных выражений, которое вы создадите перед циклом и примените его к строке. Число совпадений применительно к данной строке будет ваш счетчик слов, и это не должно создавать массив строк (который является очень расточительным и который вы не используете). В JavaDocs вы увидите, что split работает через регулярные выражения; это правда, но split делает дополнительный шаг по созданию отдельных строк, и именно здесь могут быть ваши отходы.
Вы также можете использовать регулярное выражение для поиска совпадения вместо содержимого, хотя это может быть не намного быстрее.
Вы можете сделать вещи параллельными, используя несколько потоков. Однако, если split () является причиной вашего горя, ваша проблема - это издержки и нехватка места в куче, поэтому вы не обязательно извлечете из этого выгоду.
В целом, если вам нужно это сделать много , вы можете написать скрипт на языке, более "дружественном" для работы со строками. Сценарий из 10 строк в Python может сделать это намного быстрее.