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

Remi Forax forax at univ-mlv.fr
Thu Jan 18 16:09:11 UTC 2018

----- 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

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


More information about the valhalla-dev mailing list