[Vm-dev] how many free bits we have in Object Header?

Adrian Lienhard adi at netstyle.ch
Thu May 6 06:51:52 UTC 2010


Hi Mariano,

Yes this is basically right. Hash is not the object address because GC moves objects; no object table. You get the 12bit hash with #identityHash (implemented as a  primitive in ProtoObject). Sets and other data structures depending object hashes use #hash, or directly #identityHash in the case of IdentitySet. The method #hash, if not overridden, falls back to #identityHash.

Cheers,
Adrian


On May 5, 2010, at 11:55 , Mariano Martinez Peck wrote:

> On Tue, May 4, 2010 at 2:12 PM, Adrian Lienhard <adi at netstyle.ch> wrote:
> 
>> 
>> Hi Mariano,
>> 
>> I see two solutions
>> - make the identityHash (even) smaller
>> 
> 
> Hi Adrian. Thanks for you answer. I am still newbie with the VM and there
> are a lot of things I don't understand :(
> 
> I though that in squeak the hash of an object was the address in memory.
> Then I though this was in Smalltalk 80 where you had an object table, and
> thus, there were no problem with the address of an object. In squeak I think
> that the Object Table doesn't exist anymore, but objects can change address,
> while the Hash shouldn't be modified. That's why you need 12 bits of hash in
> the object header ?   so...you always use this 12 bits for hash and not the
> address of the object at all ?  I ask because in the book "Squeak Open
> Personal  Computing and Multimedia" that I am reading, it says:
> 
> "12 bits object hash (for hashed Set usage)"
> 
> But if it is only for hashed Set..what happens with the hash of normal
> objects?   As I see in the code, it ALSO uses those 12 bits. I am right ?
> Maybe this changed from the time the book was written.
> 
> 
> 
>> - remove compact classes
>> 
>> The former would probably not be hard to implement (just change some bit
>> masks and then rehash all sets). I've brought up the idea about the latter
>> some time ago on this mailing list. The idea is to remove compact classes to
>> get a larger identityHash (trading memory against speed). After the removal,
>> only two header types are left and hence you gain a spare bit.
> 
> 
> 
> Again, I am trying to understand all this. I read about Compact Classes but
> still I think I don't understand them. They are just one world objects ?
> 
> Why you say than removing them we will only use 2 header types instead of 4
> ? which ones we will use  and why we wouldn't use the others 2 ?
> 
> In addition, in this book it says:
> 
> "5 bits compact class index, nonzero if the class is in a group of classes
> known as "Compact Classes"
> 
> I don't understand these 5 bits and neither if they have sense or not if we
> remove the compact classes.
> 
> Thank you very much for any help in advance,
> 
> Mariano
> 
> 
> I think this shouldn't be too much work either, but I haven't come around to
>> implementing it (yet).
>> 
>> Good luck ;)
>> Adrian
>> 
>> On May 4, 2010, at 13:13 , Mariano Martinez Peck wrote:
>> 
>>>>> 
>>>>> Now...the question is, is there another free bit in the object header ?
>> I
>>>>> need another one :(
>>>> 
>>>> Based on the comment at the bottom of Interpreter>>internalIsImmutable:
>>>> I suspect that somebody else has their eye on that last available bit
>>>> also ;-)
>>>> 
>>>> 
>>> Yes, I know :(   But for the moment I don't care to "integrate" my stuff.
>> I
>>> just want to play and experiment. And even for that, I need 2 bits :(
>>> Of course, if I once make something good to integrate, I will have double
>>> problem :(
>>> 
>>> So...no solution ?
>> 
>> 



More information about the Vm-dev mailing list