Ruby 1.9.3中的Fixnum数组内存消耗 - 数组是否被压缩?

时间:2014-11-04 17:26:09

标签: ruby arrays garbage-collection ruby-1.9.3

我创建了新数组,并使用"使用大小"跟踪分配的内存量。由GC::Profiler.report返回。

Fixnum(大小:以字节为单位的内存):

100,000: 900
1,000,000: 1320
10,000,000: 17,552,240

Bignum(大小:以字节为单位的内存):

100,000: 5081,680
1,000,000: 39,999,520

Bignum的内存消耗是有意义的,但Fixnum的消耗非常奇怪。我希望数组每个元素占用至少4个字节(更可能是8个字节,因为我使用的是64位机器)。对于低内存消耗,我唯一可以提出的逻辑解释是Fixnum数组被压缩为位图,但是我找不到任何支持它的文档。

发生了什么?

使用的代码是:

GC::Profiler.enable
GC.start
GC::Profiler.report
a = []
1_000_000.times do 
  a << rand(2**62)
end
GC::Profiler.report

结果:

Index    Invoke Time(sec)       Use Size(byte)     Total Size(byte)         Total Object                    GC Time(ms)
    1              13.541             15700560             19223000               480575        68.00500000000120337518
    2              14.017             15701880             19239360               480984        48.00299999999957378805

0 个答案:

没有答案