[Exp] Experimenting with "value-based" classes and oop testing

David Simms david.simms at oracle.com
Fri Jan 19 08:25:21 UTC 2018


On 18/01/18 17:09, Remi Forax wrote:
> ----- Mail original -----
>> De: "David Simms" <david.simms at oracle.com>
>> À: "valhalla-dev" <valhalla-dev at openjdk.java.net>
>> Envoyé: Mercredi 17 Janvier 2018 13:26:33
>> Objet: [Exp] Experimenting with "value-based" classes and oop testing
>> So to lay some ground-work for testing value oops versus reference oops,
>> I've created the following patch "Value based classes" (VBC) for the
>> experimental branch (exp):
>>
>> http://cr.openjdk.java.net/~dsimms/valhalla/exp_vbc/webrev0/
>>
>> Highlights:
>>
>>   * Added "INCLUDE_VBC" feature macro to clearly identify "Value-based
>>     class" feature
>>   * klass.hpp:572 Klass may be marked as "value-based" via a new access flag
>>       o systemDictionary.cpp:2053 uses the flag "ValueBasedClasses" to
>>         mark the current JDK value-based classes, or the user may
>>         specify their own
>>   * Prototype of efficient "oopDesc::klass_is_value_based()" test has
>>     been implemented by encoding "odd/even" klass ptr into the
>>     "oop._metadata" (i.e. oop klass ptr)
>>       o klass.cpp:174 affectively double the klass ptr alignment (from 8
>>         to 16 bytes), and ensures value classes are aligned "odd" (or to
>>         8 bytes), and regular classes to 16 bytes
>>       o Wastes a little memory, but given that instanceKlass weigh
>>         around 460 bytes, an extra 8 bytes seemed like a small price...
>>       o ...testing for value classes simply involves test the effective
>>         least significant bit in the oop metadata field, should work for
>>         both compressed (lsbit) and uncompress klass ptr (is 8 byte
>>         aligned).
>>           + klass.inline.hpp:74 should be relatively simple to implement
>>             in both JIT and template assembler
>>
>> One can use this as basis for building experiments with alternative
>> behaviour for L-World proposal, e.g. monitor operations involving values.
>>
>> Comments ?
> clever trick,
>
> in the test, because you do not use LocalDateTime, @run can be simplified to
>    @run testng/othervm -XX:ValueBasedClasses=java/time/LocalTime,ValueBased ValueBased

Yeah, this test was resurrected from a previous experiment and then 
gutted. I should add further features using oop->klass_is_value_based() 
so the test actually does something useful.

>
> my other question is what is the purpose to have a value based class with mutable fields ?
>
> Rémi

Hehe, yeah ValueBased test itself doesn't follow the rules, will adjust.

Also thinking of adding some form of auto-value classification to class 
file parser, identify value type candidates in existing benchmarks, so 
we can see L-World costs

/D





More information about the valhalla-dev mailing list