Issue #12009 has been reported by Eric Wong.

----------------------------------------
Feature #12009: [PATCH] psych: pre-freeze string keys for hashes
https://bugs.ruby-lang.org/issues/12009

* Author: Eric Wong
* Status: Open
* Priority: Normal
* Assignee: Aaron Patterson
----------------------------------------
~~~
With the following example, this reduces allocations from 346 to 324
strings when calling Psych.load on a 26-entry hash:

-------------------------------8<--------------------------------
require 'psych'
require 'objspace'
before = {}
after = {}
str = [ '---', *(('a'..'z').map { |k| "#{k * 11}: 1" }), '' ].join("\n")
GC.disable
ObjectSpace.count_objects(before)
h = Psych.load(str)
ObjectSpace.count_objects(after)
p(after[:T_STRING] - before[:T_STRING])
-------------------------------8<--------------------------------

Allocating 324 strings for 26 hash keys is still expensive.  More
work will be needed to reduce allocations further...

Tested on x86-64.

It would actually be awesome if Psych could use the fstring table
and have string keys auto-deduped as in Ruby source code.
~~~


---Files--------------------------------
0001-psych-pre-freeze-string-keys-for-hashes.patch (1.41 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>