RFR (M) 8055283: Expand ResourceHashtable with C_HEAP allocation, removal and some unit tests

Erik Helin erik.helin at oracle.com
Tue Oct 27 11:40:47 UTC 2015


Hi Mikael,

On 2015-10-16, Mikael Gerdin wrote:
> Hi all,
> 
> Here's an old favorite. I'm yet again in need of a simple-to-use hash table
> in a place where resource allocation is impossible to use.

Thanks for taking care of this!

> The idea is to add a ResourceObj::allocation_type template parameter to
> ResourceHashtable to allow a user to specify C-heap allocation using
> ResourceObj::C_Heap.
> 
> Currently if one tries to do
> {
> ResourceMark rm;
> ResourceHash* hash = new (ResourceObj::C_HEAP) ResourceHash();
> hash->put(...)
> }
> hash->get(...)
> 
> The get()-call will crash because the allocation of the hash table nodes
> does not respect the C_HEAP parameter.
> 
> To sweeten the deal a little I add support for removing elements and also a
> small bunch of unit tests to verify that the operations work as expected.
> 
> I also discovered a small issue with the primitive_hash() function which is
> the default one:
>   36 template<typename K> unsigned primitive_hash(const K& k) {
>   37   unsigned hash = (unsigned)((uintptr_t)k);
>   38   return hash ^ (hash > 3); // just in case we're dealing with aligned
> ptrs
>   39 }
> 
> It xors hash with the boolean expression (hash > 3) instead of what was
> probably intended (hash >> 3) to deal with aligned pointers as the comment
> suggests.
> It appears that the only user of ResourceHash which doesn't specify its own
> hash function is MethodFamily::_member_index so it would be nice if someone
> could point me at any default method tests to verify that a proper hash
> function doesn't break anything.
> 
> Bug: https://bugs.openjdk.java.net/browse/JDK-8055283
> Webrev: http://cr.openjdk.java.net/~mgerdin/8055283/webrev.1/

Please wrap all your test code in #ifdef ASSERT, we don't want it to be
included in product builds. Then you can also get rid of the #ifdef
ASSERT in the test.

Modulo the above and Thomas's comments, the patch looks good to me. No
need to re-review these changes.

Thanks,
Erik

> Testing: JPRT
> RBT (Kitchensnk, hotspot/test/:hotspot_all)
> 
> 
> Thanks!
> /Mikael


More information about the hotspot-dev mailing list