Некоторые проблемы, которые возникают при использовании Java в высоконагруженных системах:
- Потери производительности внутри самой Java. vk.com Например, если нужно обслуживать поток трафика в 40 Гбит, то при использовании стандартных решений на Java не получится написать сервер, который будет использовать все доступные ресурсы. vk.com
- Хранение большого количества объектов в памяти. vk.com Garbage collector, который автоматически убирает мусор, в этом случае скорее мешает, чем помогает. vk.com Кроме того, если в памяти хранится массив данных на сотню гигабайт, то его загрузка займёт значительное время. vk.com
- Deadlock потоков. habr.com В случае большого количества потоков deadlock возникает в самых неожиданных местах. habr.com
- Использование JSP. habr.com Этот компонент не подходит для высоконагруженной системы, даже с кэшем он будет медленнее сервлетов. habr.com
- Создание слишком больших очередей. habr.com Они потребляют много памяти, и может случиться, что потоки не успевают обработать запросы из очереди за время tcp или http таймаута. habr.com
Для решения этих проблем могут потребоваться специальные решения, например, разработка библиотек, которые позволяют обходить узкие места. vk.com