Возможно ли сделать некоторый подмножество потоков (например, из определенного ThreadPool), выделять память из собственной кучи? Например. большая часть потоков выделяется из обычной общей кучи, а несколько рабочих потоков выделяются из отдельных куч (1: 1 на поток).Распределение кучи по конкретным темам
Цель состоит в том, чтобы обеспечить безопасное выполнение кода в общей среде - типичный рабочий является без гражданства и работает на отдельном потоке, обработка одного запроса не должна потреблять более 4 МБ кучи.
Update # 1 Re: А почему вы беспокоитесь о «безопасном исполнении» и непредсказуемое увеличение потребления кучи?
Речь идет о безопасном хостинге произвольного стороннего Java-кода в рамках моего процесса. Один раз из пунктов, чтобы не получить «Из памяти» для всего моего процесса из-за ошибок в стороннем коде.
Update # 2 Re: Как ограничить использование памяти для каждого потока, в Java язык это невозможно
Согласно моему исследованию, прежде чем я вывесил этот вопрос мое мнение это то же самое, я Я просто надеюсь, что я что-то упустил.
Единственные возможные альтернативные решения для моей потребительной случае, как я вижу прямо сейчас ...
1) How much memory does my java thread take? - использование нить памяти след в какой-то губернатор нити и прекратить плохие нити
2) Run Java code on my own JVM - Да, это возможно. Вы можете скачать JVM с открытым исходным кодом, изменить его ... :)
Нет, вся идея, стоящая за потоками, должна быть как можно более легкой, поэтому они разделяют одну и ту же кучу; это также затруднит синхронизацию, если они разрешат это.Но почему вас беспокоит «безопасное исполнение» и непредсказуемое увеличение потребления кучи? – Viruzzo
Типичные реализации JVM используют поточные локальные буферы распределения (TLAB), где каждый поток имеет свою небольшую область для небольших распределений без значительных затрат на потоковую безопасность. Однако это не касается доступности. В RTSJ есть некоторые вещи, относящиеся к потокам и кучам, но это касается задержки. –