Request for review: 8003424 - Enable Class Data Sharing for CompressedOops

Mikhailo Seledtsov mikhailo.seledtsov at oracle.com
Fri Jul 19 07:14:35 PDT 2013


Hi Harold,

  I have reviewed only the test portion of this change; it looks good.

Misha

On 7/18/2013 6:03 PM, Vladimir Kozlov wrote:
> Nice clean up, Harold
>
> Could you add the size of class metaspace in output with 
> PrintCompressedOopsMode (and with verbose). I don't want to remember 
> an other very long flag name: TraceMetavirtualspaceAllocation.
>
> Also it would be nice to print these info line (and compressed oops 
> info line) in hs_err files.
>
> About "effect(KILL cr);   /// ???? is this KILL needed?" in x86_64.ad.
> encode_klass_not_null() and decode_klass_not_null() use arithmetic 
> instructions which modify flags: subq, addq, shrq, xorptr. Also note 
> that code in .ad file does not check the encoding mode for narrow 
> klass/oop so it should be conservative and assume that arithmetic 
> instructions are used.
>
> If Universe::narrow_klass_shift() == 0 you have klass base below 4Gb 
> so the value is 32 bit. You can use it directly in narrow klass 
> encoding/decoding without destroying R12.
>
> instr_size_for_decode_klass_not_null() is ugly but unfortunately we 
> can't do other way. I assume you use max size because depending on 
> registers used in instructions you will or will not get prefix byte 
> (r8-r15).
>
> I will look on changes in more details may be late.
>
> Thanks,
> Vladimir
>
> On 7/18/13 10:54 AM, harold seigel wrote:
>> Hi,
>>
>> Please review this fix for bug 8003424.
>>
>> Open webrev at http://cr.openjdk.java.net/~hseigel/bug_8003424/
>> <http://cr.openjdk.java.net/%7Ehseigel/bug_8003424/>
>> Open bug links at:
>>
>>     http://bugs.sun.com/view_bug.do?bug_id=8003424
>>     http://bugs.sun.com/view_bug.do?bug_id=8016729
>>     http://bugs.sun.com/view_bug.do?bug_id=8011610
>>
>> JBS Bug links at
>>
>>     https://jbs.oracle.com/bugs/browse/JDK-8003424
>>     https://jbs.oracle.com/bugs/browse/JDK-8016729
>>     https://jbs.oracle.com/bugs/browse/JDK-8011610
>>
>>
>> This fix provides support for using compressed klass pointers with CDS.
>> It also changes the class metaspace allocation on 64-bit platforms when
>> UseCompressedKlassPointers is true.  Instead of allocating the class
>> metaspace as part of the Java Heap allocation and locating it at the
>> base of that allocation, the metaspace will now be allocated separately,
>> above the Java heap.  This will enable future expansion of the metaspace
>> because it won't be backed up against the Java heap.  If CDS is being
>> used, then the CDS region will be allocated between the Java heap and
>> the metaspace.
>>
>> The new class metaspace allocation code tries to allocate memory at 32G,
>> or above the CDS region, if it is present.  Because of this, encoding
>> and decoding of compressed klass pointers will always require use of a
>> base register.  So, encoding and decoding of compressed klass pointers
>> will differ from compressed oops.
>>
>> There are no class metaspace allocation changes if
>> UseCompressedKlassPointers is turned off or if running on a 32-bit 
>> platform.
>>
>> The code changes also include some cleanup and will fix bugs 8016729,
>> 8011610, and 8003424.
>>
>>
>> Many of the modules in this webrev contain a lot of changes. Modules
>> macroAssembler_sparc.cpp and macroAssembler_x86.cpp were changed to
>> support the new encoding and decoding of compressed klass pointers.
>>
>> Module metaspace.cpp was changed significantly to support the new
>> allocation for metaspace and the CDS region and to determine compressed
>> klass pointer encoding base and shifting values.
>>
>> Most of the changes to module universe.cpp were to remove code related
>> to allocating metaspace and remove code that considered compressed klass
>> pointers when determining the compressed oops compression mechanism.
>>
>> Modules klass.inline.hpp and oop.inline.hpp were changed as part of a
>> cleanup requested by Coleen.
>>
>>
>> These changes were tested with JCK Lang and VM tests, JTReg tests, JPRT,
>> GCBasher, refworkload, ute vm.quick.testlist and vm.mlvm.testlist
>> tests.  Most of the test were run with -Xshare:on and -Xshare:off (with
>> and without CDS), and were run on Solaris Sparc, 32-Bit Linux and 64-Bit
>> Linux.  Jtreg tests were run on Windows 7 and Mac OS.  JCK tests were
>> run on Solaris x86.
>>
>> The performance impact of these changes is TBD.
>>
>> Thanks, Harold
>>
>>



More information about the hotspot-runtime-dev mailing list