Изоляция памяти потоков в JRuby - PullRequest
0 голосов
/ 27 апреля 2011

В настоящее время мы запускаем Resque с использованием JRuby и имеем проблемы с утечками памяти.Одна из приятных особенностей Resque и Ruby / REE заключалась в том, что он использовал семантику вилки, которая изолировала утечки памяти для каждой работы, а не для каждой виртуальной машины (форка для каждой работы).

Не выглядитнапример, есть варианты для разветвления JVM, которые имеют смысл, но интересуются, есть ли какие-то вещи, которые вы можете сделать с изоляцией памяти для потоков, чтобы при событии остановки в потоке вся память, созданная этим потоком, уничтожалась независимо от того, есть ли на нее ссылки.

1 Ответ

3 голосов
/ 27 апреля 2011

Потоки, конечно, не процессы.Если вы используете потоки, вы разделяете общий пул памяти с остальной частью процесса, и поэтому на самом деле не существует понятия «память, созданная этим потоком».Можно реализовать виртуальную машину таким образом, чтобы потоки получали свое собственное пространство памяти, но в случае JRuby это лишило бы многих преимуществ наличия собственных потоков в первую очередь.Команда JRuby (например, я), чтобы выяснить, что происходит, и мы это исправим.Подход MRI - отвратительная пластинка, которая только ленится о памяти и управлении ресурсами в коде.

...