diff options
author | watson1978 <watson1978@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-18 01:49:33 +0000 |
---|---|---|
committer | watson1978 <watson1978@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-18 01:49:33 +0000 |
commit | 07d48bbe133b7140a1a0b7b0f8c7f16f406a485a (patch) | |
tree | 3df5ccfc0492a2b04e05d48d38f81c6e27990c5d /inits.c | |
parent | 73da429c36cd4d969d3d120368ce01b7b02a623b (diff) | |
download | ruby-07d48bbe133b7140a1a0b7b0f8c7f16f406a485a.tar.gz |
Improve performance of creating Hash object
When generate Hash object, the heap area of st_table will be always allocated in internally
and seems it take a time.
To improve performance of creating Hash object,
this patch will reduce count of allocating heap areas for st_table by reuse them.
Performance of creating Hash literal -> 1.53 times faster.
[Fix GH-1766] [ruby-core:84008] [Feature #14146]
### Environment
* OS : macOS 10.13.1
* CPU : 1.4 GHz Intel Core i7
* Compiler : Apple LLVM version 9.0.0 (clang-900.0.39)
### Before
$ ./miniruby -v -I. -I../benchmark-ips/lib ~/tmp/bench/literal.rb
ruby 2.5.0dev (2017-11-28 hash 60926) [x86_64-darwin17]
Warming up --------------------------------------
Hash literal 51.544k i/100ms
Calculating -------------------------------------
Hash literal 869.132k (± 1.1%) i/s - 4.381M in 5.041574s
### After
$ ./miniruby -v -I. -I../benchmark-ips/lib ~/tmp/bench/literal.rb
ruby 2.5.0dev (2017-11-28 hash 60926) [x86_64-darwin17]
Warming up --------------------------------------
Hash literal 63.068k i/100ms
Calculating -------------------------------------
Hash literal 1.328M (± 2.3%) i/s - 6.685M in 5.037861s
### Test code
require 'benchmark/ips'
Benchmark.ips do |x|
x.report "Hash literal" do |loop|
count = 0
while count < loop
hash = {foo: 12, bar: 34, baz: 56}
count += 1
end
end
end
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61309 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'inits.c')
-rw-r--r-- | inits.c | 1 |
1 files changed, 1 insertions, 0 deletions
@@ -16,6 +16,7 @@ void rb_call_inits(void) { + CALL(st); CALL(Method); CALL(RandomSeedCore); CALL(sym); |