Кроме того, global.gc() запускает неинкрементальный mark-sweep-compact, который работает очень долго, в сравнении с инкрементальным, это плохо отражается на быстродействии в целом.
--nouse-idle-notification не отключает GC, а лишь убирает реакцию V8 на посылаемые idle-события, которые в моем случае и так не посылаются, так как процесс занят непрерывно.
Интересно, о CountDownLatch раньше не знал, спасибо.
А почему нельзя сделать просто Map<String,CountDownLatch> — без списка? Если уже есть latch, то берем его и вызываем его await(). Ведь несколько потоков могут висеть на одном latch?
Быстродействие. Скорость обработки больших объемов на чтение и поменьше на запись в базе размером несколько десятков Гб (в память целиком не влезает в любом случае).