Сохраняет ли Ruby переменные на жестком диске?

Когда я запускаю программу на ruby, я предполагаю, что переменные хранятся в оперативной памяти. За исключением случаев, когда нам приходится листать страницы из-за нехватки оперативной памяти, будут ли они когда-либо храниться на жестком диске? Я думаю, что стеки и кучи важны, и я не смог найти никакой точной информации о том, где ruby ​​хранит переменные.


person Tyler DeWitt    schedule 13.11.2013    source источник
comment
Есть ли что-то, что заставляет вас подозревать, что дело не в этом?   -  person Matt Ball    schedule 13.11.2013
comment
Отредактировал вопрос. Вы знаете, что они хранятся в оперативной памяти. Ваш вопрос заключается в том, хранятся ли они когда-либо на жестком диске.   -  person sawa    schedule 13.11.2013
comment
@MattBall Не совсем, но в процессе работы над приложением, где важна производительность, я понял, что никогда не рассматривал и не исследовал, как ruby ​​обрабатывает переменные. Это приложение для рельсов, и я понял, что полагаюсь на драгоценные камни для кэширования, когда мне, возможно, придется самому учитывать побочные эффекты.   -  person Tyler DeWitt    schedule 13.11.2013
comment
@sawa Я не был уверен, что они хранятся в оперативной памяти (хотя я предполагал), так что спасибо, что проверили это для меня. И я согласен с обновленным вопросом, мне любопытно, когда/если переменные записываются на диск   -  person Tyler DeWitt    schedule 13.11.2013
comment
возможный дубликат Что в Ruby хранится в стеке?   -  person Musannif Zahir    schedule 13.11.2013


Ответы (3)


Спецификация языка Ruby не предписывает и не запрещает какую-либо конкретную стратегию хранения. Любая реализация может хранить значения где угодно и как угодно. Спецификация говорит только о том, каким должен быть результат выполнения программы на Ruby, а не о том, как выполняется программа. (Как и любая другая спецификация языка.)

Например, в SmallRuby объекты могут при некоторых обстоятельствах храниться на диске. И вся цель MagLev состоит в том, чтобы иметь реализацию Ruby, которая может работать с кучами которые на несколько порядков больше, чем оперативная память, за счет их хранения в распределенном кластере на диске.

person Jörg W Mittag    schedule 13.11.2013

Короткий ответ: надеюсь, нет. Но длинный ответ: да, в какой-то момент, если машине не хватит памяти, переменные Ruby должны будут записаться на диск.

Однако, чтобы ответить на ваш точный вопрос: нет, сам Ruby никогда не помещает переменные на жесткий диск (насколько мне известно), но в какой-то момент операционная система освободит память Ruby и отправит ее на диск.

Что еще интереснее, вы можете хранить переменные ruby ​​на диске в файлах YAML (еще один язык разметки), .yml. Итак, если вы пытаетесь сохранить сложный объект в базе данных с помощью Ruby, вы можете использовать текстовый столбец, а затем синтезировать его для создания экземпляра в качестве нового объекта данного класса.

person OneChillDude    schedule 13.11.2013

Этот ответ относится к стандартной реализации MRI/YARV Ruby.

Как и любой другой процесс, память работающей программы Ruby контролируется операционной системой. Если какой-то другой процесс требует больше памяти, ОС попытается ее найти. Если свободной ОЗУ нет, ОС может потребоваться временно сохранить или развернуть ОЗУ другого процесса, например вашей программы на Ruby, на жестком диске. Он будет восстановлен в оперативной памяти, когда ваша программа снова запустится.

Важно отметить, что это полностью контролируется ОС — Ruby никогда не узнает, была ли его память выгружена или нет.

person joews    schedule 13.11.2013