Project

General

Profile

Actions

Feature #12009

closed

[PATCH] psych: pre-freeze string keys for hashes

Added by normalperson (Eric Wong) over 9 years ago. Updated over 7 years ago.

Status:
Rejected
Target version:
-
[ruby-core:72950]

Description

With the following example, this reduces allocations from 346 to 324
strings when calling Psych.load on a 26-entry hash:


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])

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0