我创建了新数组,并使用"使用大小"跟踪分配的内存量。由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