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