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