What's the purpose of hashtable::reverse()

coleen.phillimore at oracle.com coleen.phillimore at oracle.com
Thu Mar 16 15:52:25 UTC 2017



On 3/16/17 6:20 AM, Ioi Lam wrote:
> Thanks Mikael for the detective work. The bug comment says:
>
> "the String and symbol tables are hashtables where the hashbuckets
> are linked lists -- in reverse chronological order of there creation. 
> This
> means that, in some circumstances, some symbols are unnecessarily touched
> when looking for older most likely needed symbols. This can be 
> addressed by
> simply reversing the order of the lists before creating the archive."
>
> Since JDK9, CDS no longer stores the string and symbol tables using 
> the "regular" hashtable.
>
> The only "regular" hashtable use by CDS is the shared dictionary (for 
> name->class lookup), but this table is rehashed at some point, so 
> calling reverse() will no longer has the desired effect of moving 
> popular Klasses (such as java/lang/Object) to the front of a linked-list.
>
> So this optimization is irrelevant now. I've created an RFE to remove it.

Great, thank you!

More optimizations that we have no means of measurement.

Coleen
>
> https://bugs.openjdk.java.net/browse/JDK-8176863
>
> Thanks
> - Ioi
>
> On 3/16/17 5:17 PM, Mikael Gerdin wrote:
>> Hi Ioi,
>>
>> I found this old bug where I think the reversing was added:
>> https://bugs.openjdk.java.net/browse/JDK-4994483
>>
>> /Mikael
>>
>> On 2017-03-16 07:48, Ioi Lam wrote:
>>> This seems to be used only by CDS dumping, and if I remove the call
>>> nothing bad seems to happen. Does anyone know what hashtable::reverse()
>>> could possibly achieve?
>>>
>>> Also, there's another variant that seems to be dead code that no one 
>>> calls.
>>>
>>>     template <class T, MEMFLAGS F> void Hashtable<T, F>::reverse(void*
>>> boundary)
>>>
>>> - Ioi
>>>
>>>
>



More information about the hotspot-dev mailing list