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

Vladimir Kozlov vladimir.kozlov at oracle.com
Thu Jul 18 15:03:36 PDT 2013


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