From: "Martin J. Dürst" Date: 2009-12-21T11:55:17+09:00 Subject: [ruby-core:27255] Re: compressed pointers? Looking at the wiki page at http://wikis.sun.com/display/HotSpotInternals/CompressedOops, what they do is essentially to shift pointer values right by three bits to save them, and shift them right by three bits again to use them. This means that they can address 8 times the space addressable by a 32-bit machine, i.e. 32GB. It works because the three lowest bits of a pointer are zero, if that pointer points to an object or a (64bit) int or so. It doesn't work for pointing into strings,... where you need per-byte precision. That's why the proposal talks about OOP, "ordinary object pointers". For Ruby, there are (at least) the following two problems: 1) Object pointers in Ruby (MRI/YARV) are overlaid with integers (and some other values, such as true/false, and I think symbols). The distinction is made by using the lowest two bits, which are 00 for pointers and something else for immediate values. 2) The data record for a (non-immediate) Ruby object is 5 words (read object pointers) in size. These five words are used for different purposes depending on the actual object involved. In the case of a String, some of them point to actual string data, they therefore cannot be compressed. So overall, it looks rather improbable for Ruby to compress pointers in the near future. Regards, Martin. On 2009/12/17 8:41, Roger Pack wrote: > I have seen that Ruby on 64-bit takes about twice as much RAM as it > does on 32-bit machines. > > I also learned recently that Java with their new version 7 has some > optimizations to "compress" 64 bit pointers somewhat, so that they use > less space. [1] > I wonder if something like this could be used in ruby core. > Opinions? > -r > [1] http://openjdk.java.net/projects/jdk7/features/ ("compressed 64 > bit pointers") > > -- #-# Martin J. D�rst, Professor, Aoyama Gakuin University #-# http://www.sw.it.aoyama.ac.jp mailto:duerst@it.aoyama.ac.jp