Есть ли какой-либо жесткий предел для ряда потоков в Java?

Некоторые источники говорят, что у вас есть жесткий предел для числа потоков на Java (например, 15k или 30k), даже если у вас нет ограничения на ОС для этого и неограниченного объема оперативной памяти. Я также слышал, что в Java 7 этот лимит снят. Оба утверждения истинны?

Ответы

Ответ 1

Спецификация виртуальной машины Java не указывает ограничение на количество потоков. Обычно они ограничены объемом доступного пространства стека, поскольку каждый поток получает свой собственный стек. (Неспособность выделить стек - это то, что обычно вызывает исключение OutOfMemory при попытке создать новый поток.) ​​Я считаю, что пулы потоков и другие механизмы могут использоваться для ограничения количества потоков. (Это используется, например, с помощью Sun Portal Portal Portal, чтобы уменьшить количество транзакций.)

Различные реализации виртуальных машин могут налагать другие ограничения. Например, операционная система BlackBerry ограничивает несистемные потоки до 16 для каждого приложения и всего 64. Я ожидаю, что другие производители VM также наложили дополнительные ограничения. Я бы попросил производителя VM ответить на этот вопрос.