Please review 7178670: runtime/7158800/BadUtf8.java fails in SymbolTable::rehash_table

Daniel D. Daugherty daniel.daugherty at oracle.com
Fri Jun 22 11:13:21 PDT 2012


On 6/21/12 9:40 PM, Coleen Phillimore wrote:
>
> After some discussions about the preserving shared state in move_to, 
> it occurred to me that after rehashing, the shared entries were no 
> longer last in the buckets.   The walking in StringTable and 
> SymbolTable assumed this.    I also added more of a comment about 
> preserving the state.  It could be nicer code and safer but it would 
> also introduce some risk or possible performance impact.    These are 
> the latest webrevs which I've tested with rehash_count=2 and 
> rehash_multipier=1 to make it rehash a lot.
>
> open webrev at http://cr.openjdk.java.net/~coleenp/hashmap_cds2
> open webrev at http://cr.openjdk.java.net/~coleenp/hashmap_7u6_cds2/

src/share/vm/classfile/symbolTable.cpp
     line 102: Please consider the following rewrite of your comment:

         // Shared entries are normally at the end of the table and if
         // we run into a shared entry, then there is nothing more to
         // remove. However, if we have rehashed the table, then nothing
         // is shared anymore.

     line 143, 807: // This should never happen with -Xshare:dump but it
                       might in testing mode.
         These comments aren't comforting. Just curious: why might it happen
         in testing mode?

     line 723: should this be the following instead:

         HashtableEntry<Symbol*>* entry =
           (HashtableEntry<Symbol*>*)HashtableEntry<Symbol*>::make_ptr(*p);

         That would match what you did on lines 99-100.

src/share/vm/utilities/hashtable.cpp
     line 123: // Keep the shared bit in the Hashtable entry so it can't 
be deleted.

         If we've rehashed the table, then shared entries can "sort of"
         be deleted. They are deleted from the symbol table, but their
         memory is not freed. Am I understanding this right?

         Maybe say "so it can't be freed". I don't know how to make this
         more clear.


src/share/vm/utilities/hashtable.hpp
     No comments.


Dan



>
> Thanks,
> Coleen
>
>
> On 6/21/2012 3:25 PM, Coleen Phillimore wrote:
>> Summary: Cannot delete _buckets and HashtableEntries in shared space 
>> (CDS)
>>
>> Tested with the tests that I added using Class Data Sharing (on and 
>> off).  This is both a patch for 7u6 and main.
>>
>> open webrev at http://cr.openjdk.java.net/~coleenp/hashmap_cds/
>> open webrev at http://cr.openjdk.java.net/~coleenp/hashmap_7u6_cds/
>>
>> Thanks,
>> Coleen
>>
>>


More information about the hotspot-runtime-dev mailing list