Я пишу приложение, в котором будет работать несколько потоков, и хочу ограничить использование ЦП/памяти этих потоков.
Существует похожий вопрос для C++, но я хочу попытаться избежать использования C++ и JNI, если возможный. Я понимаю, что это может быть невозможно с использованием языка более высокого уровня, но мне любопытно узнать, есть ли у кого-нибудь какие-либо идеи.
EDIT: добавлена награда; Я хотел бы некоторые действительно хорошие, хорошо продуманные идеи по этому поводу.
РЕДАКТИРОВАТЬ 2: Ситуация, в которой мне это нужно, - это выполнение чужого кода на моем сервере. По сути, это совершенно произвольный код с единственной гарантией того, что в файле класса будет основной метод. В настоящее время несколько совершенно разных классов, которые загружаются во время выполнения, выполняются одновременно как отдельные потоки.
В том виде, как это написано, было бы сложно провести рефакторинг, чтобы создать отдельные процессы для каждого выполняемого класса. Если это единственный хороший способ ограничить использование памяти с помощью аргументов виртуальной машины, пусть будет так. Но я хотел бы знать, есть ли способ сделать это с помощью потоков. Даже в качестве отдельного процесса я хотел бы каким-то образом ограничить его использование ЦП, поскольку, как я упоминал ранее, несколько из них будут выполняться одновременно. Я не хочу, чтобы бесконечный цикл поглощал все ресурсы.
РЕДАКТИРОВАТЬ 3: простой способ приблизить размер объекта — использовать Инструментальные классы; в частности, метод getObjectSize. Обратите внимание, что для использования этого инструмента необходима специальная настройка.