Issue #9203 has been updated by ko1 (Koichi Sasada).

Assignee changed from charliesome (Charlie Somerville) to ko1 (Koichi Sasada)

I got it!

So the problem is major marking timing.
----------------------------------------
Bug #9203: fstring_table size and performance
https://bugs.ruby-lang.org/issues/9203#change-43386

Author: ko1 (Koichi Sasada)
Status: Open
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category: core
Target version: current: 2.1.0
ruby -v: 2.1
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


Clip question discussed on skype.

I have two questions about the following benchmark and result.

(1) why slowdown if seq == true ?
(2) why not GC'ed? (fatal error)

###

require 'benchmark'
a = 0
b = n = 10_000_000
seq = true

Benchmark.bm{|x|
  x.report{
    h = {}
    (a..b).each{|i|
      h[i.to_s] = nil
    }
  }
  a, b = b, b+n if seq
  x.report{
    h = {}
    (a..b).each{|i|
      h[i.to_s] = nil
    }
  }
  a, b = b, b+n if seq
  x.report{
    h = {}
    (a..b).each{|i|
      h[i.to_s] = nil
    }
  }
}

__END__
seq == false
ruby 2.1.0dev (2013-12-02 trunk 43956) [i386-mswin32_110]
       user     system      total        real
  18.720000   0.062000  18.782000 ( 18.854394)
  15.460000   0.110000  15.570000 ( 15.569977)
  15.366000   0.093000  15.459000 ( 15.481966)

ruby 2.0.0p317 (2013-09-15 revision 42947) [i386-mswin32_110]
       user     system      total        real
  14.789000   0.094000  14.883000 ( 14.890891)
  15.319000   0.078000  15.397000 ( 15.421958)
  15.272000   0.078000  15.350000 ( 15.351450)

seq == true
ruby 2.1.0dev (2013-12-02 trunk 43956) [i386-mswin32_110]
       user     system      total        real
  18.689000   0.187000  18.876000 ( 18.934904)
  27.612000   0.250000  27.862000 ( 27.940048)
 [FATAL] failed to allocate memory

ruby 2.1.0dev (2013-12-02 trunk 43956) [i686-linux]
       user     system      total        real
  22.220000   0.400000  22.620000 ( 22.617157)
  34.170000   0.130000  34.300000 ( 34.298706)
  43.170000   0.110000  43.280000 ( 43.277328)

ruby 2.0.0p317 (2013-09-15 revision 42947) [i386-mswin32_110]
       user     system      total        real
  14.758000   0.094000  14.852000 ( 14.892891)
  15.506000   0.047000  15.553000 ( 15.566477)
  15.523000   0.015000  15.538000 ( 15.560976)



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