我们有一个在 tomcat 下运行的 java/jruby webapp,我一直在分析应用程序在运行时使用的对象数量和内存使用情况。启动后我注意到“org.jruby.RubyString”类有1,118,000个字符串“”实例,仅空字符串使用的堆内存总量为65mb,这对我来说很荒谬,因为它是15%的内存由 webapp 使用。空字符串只是存在此问题的许多字符串值的一个示例,如果我可以实习我计算出的所有 jruby 字符串,我可以节省大约 130mb。
我知道在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