Предположения времени выполнения в Ruby - PullRequest
1 голос
/ 25 мая 2010

Ruby выглядит очень круто. Я начал изучать это в течение последних двух-трех дней. В Ruby меня привлекает простота. Очень чистый код возможен. Тем не менее, внутренние реализации Ruby не подвержены влиянию внешнего мира. Я узнал, что Ruby написан на разных языках в зависимости от вкуса.

Единственное, что меня беспокоит (так как я родом из Java) - это использование памяти и скорость из-за более высокого уровня абстракции. Я просто хочу услышать, что пользователи Ruby говорят по этому поводу. Под использованием памяти и скоростью я подразумеваю, что в Java я решу, когда использовать ArrayList, когда использовать LinkedList, когда использовать Hash. Я полностью знаю их реализацию, даже если не знаю, я могу взглянуть на них. Но в Ruby это не так просто (я знаю, что это должна быть эффективная реализация). Но как я буду уверен, что я не чрезмерно использую вещи. Например, что происходит, когда я просто определяю массив. Это будет типичная связка последовательных ячеек памяти или совсем другая реализация?

Кроме того, Ruby, написанный на разных языках, следует аналогичным реализованным алгоритмам или отличается для языков.

Просто любопытно ...

1 Ответ

2 голосов
/ 26 мая 2010

Использование памяти Ruby определенно является болевым пунктом , когда дело доходит до развертывания. Возьмем, к примеру, хорошо разработанное (в обоих значениях этого термина: 1) разработанное с использованием передового опыта и 2) обширное) приложение Rails «с радостью» займет более 256 МБ в системе, где оно развернуто. Но вы получите весь этот довольно полезный синтаксический сахар с ним. Это «добро» для «зла».

Меня не слишком беспокоит то, как Ruby хранит объект Array, как было в вашем примере. Даже как опытный разработчик Ruby, мне все равно, как он хранится, потому что я предполагаю, что создатели языка знали, как оптимизировать язык, и сделали это хорошо. Но каждый релиз быстрее.

На ум приходят два места, где вы должны быть осторожны с использованием памяти в вашем приложении:

  • Чтение больших файлов
  • Создание множества объектов

Если вы собираетесь читать файл размером 160 МБ в вашу программу на Ruby, это будет более 160 МБ памяти, которая будет занята.

Тогда, если вы создаете слишком много объектов, каждый объект имеет свое собственное распределение памяти. Допустим, это 16 КБ на объект. Если вы создаете миллион объектов, это 16 000 000 КБ или 16 ГБ.

Только будь осторожен!

Вас также может заинтересовать этот удобный инструмент .

...