On May 16, 2011, at 11:37 AM, Oliver Hunt wrote:

> The same logic applies to object hashcodes -- an object must always produce 
> the same hashcode which means it will need to store it -- having a secondary 
> map doesn't help you, because that map will itself require a hascode.  
> However making every object always have space to store a hashcode is wasteful 
> of memory, so essentially some form of "private name" must be used.  I think 
> i saw someone (Erik?) say that this is what v8 does.

Old trick that works well when you have a copying collector:

Hashes are initially stored, on first demand,  in a side-table that is a hash 
table keyed by the current address of an object.  When an object is moved by 
the collector it checks to see if the object has a hashcode in the side table. 
If so, it adds a slot at the new location of the object and stores the hashcode 
in that slot.  It also removes the entry from the side table.

This requires 2 bits in the object header to represent the following states:
Object's hash has not been accessed so it is unassigned.
Object's hash is in the side-table.
Object's hash is in the hash slot.

If you can generate a suitable hash value based upon the object's current 
address you don't actually need the side-table.

If you want to have a readonly header that is ROM-able you can either always 
assign a hash slot to such objects or you can always  keep their hash in the 
side-table.

allen

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to