Есть ли способ сделать Jruby интерпретатором всех строк?

У нас есть веб-приложение java/jruby, работающее под управлением tomcat, и я анализировал количество объектов и использование памяти приложением во время выполнения. Я заметил, что после запуска класс «org.jruby.RubyString» имел 1 118 000 экземпляров строки «», общий объем кучи памяти, используемый только пустыми строками, составляет 65 МБ, для меня это смешно, потому что это 15% памяти. используется веб-приложением. Пустая строка - это только один пример многих строковых значений с этой проблемой, если я смогу интернировать все строки jruby, которые я разработал, я мог бы сэкономить около 130 МБ.

Я знаю, что в Java каждый раз, когда создается строковое значение, проверяется, существует ли уже значение в пуле строк, и повторно используется, если существует. Мне интересно, есть ли в Jruby вариант с такой же оптимизацией? если да, то как мне его включить?

Пример в Jruby:

v1 = "a"
v2 = "a"
puts v1.object_id # => 3352
puts v2.object_id # => 3354

Пример в Java:

String v1 = "a";
String v2 = "a";

System.out.println(v1.hashCode()); # => 97
System.out.println(v2.hashCode()); # => 97
8
задан Chiwai Chan 28 May 2012 в 03:25
поделиться