NO meeting July 4th, 2018 - US Independence day holiday. Next Meeting July 18th.
Karen will be on vacation week of July 18th - looking for a volunteer to run 
the meeting please.

AIs:
All: review Nestmates GetNestHost minor rewording of javadoc
All: review Value Type Consistency Checking proposal:
http://cr.openjdk.java.net/~acorn/value-types-consistency-checking-details.pdf
All: see follow-up request - please approve LW1 temporary static method 
consistency checking before preparation, to be revisited:
http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2018-June/000717.html

Karen: update Value Types Consistency Checking proposal with BootStrapMethod 
info

attendees: John, Dan S, Tobias, Dan H, Frederic, Remi, Karen

I. Nestmates:
Please review GetNestHost minor javadoc request

II. Condy
Remi: when will javac use condy for constant lambdas?
Dan S: some experiments have been done, would like to do this, no timeframe yet
Condy next step: not require Looking and Name&Type argument
Remi: ElasticSearch guy: indy metafactory not do all the needed casting - works 
for java but not for scala and other languages - will dig and find

III. Value Types

1. Equals/Hashcode/toString
Remi - saw initial prototype implementation
- two different approaches - Records in Amber vs. Valhalla
Remi has a version he could clean up and offer for all us to use - weave custom 
MethodHandles for each type
John: using loop combinators?
Remi - try not to
John: good - love to see it

** follow-on email
(many thanks Remi!)

2. Value Types Consistency Checking proposal
Karen walked through overview

Summary:
Two types of checks
1. Value Types attribute vs. reality
2. Value Types attribute of two different classes - e.g. caller-callee

Users of Value Types attribute:
1. verifier (with no loading) - catching mismatched bytecode usage
2. optimizations

Goal: avoid eager loading

Terminology:
pre-load: load before completing load of containing class
   - analogous to supertype handling
   - only proposed for flattenable instance fields, information needed for 
layout
   - risk of circularity
eager loading: loading at other times - e.g. linking, preparation, etc.

Proposed checking against reality:

1. instance fields (all flattenable in LW1) - pre-loaded: test vs. real
2. flattenable static fields - link phase, prior to preparation (post-LW1): 
test vs. real
3. local methods: prior to preparation check all (in ValueTypes attribute or 
not) parameters/return vs. real
4. CONSTANT_Class resolution: for all classes (in ValueTypes attribute or 
not)test vs. real

Proposed checking inter-class consistency
5. Preparation (selection cache creation): method declarer vs. method overrider 
consistency
6. Field or Method Resolution: For all types in signatures, check caller-callee 
consistency
Note: these checks should essentially match where loader constraint checks are 
performed today.
Note: all the inter-class consistency checks check all the signature types, 
whether or not they are in the Value Types attribute

Remi: if a method is never called, why load parameters?
Tobi: why not load one first invocation?
John: if load before call - add a new barrier. 
   - challenge with overriding hierarchy - deopt - sudden unpredictable 
performance drop
   - preparation is better than 1st call 
Karen: note: if there is a null on the stack, they might not have loaded a 
parameter at first call
Frederic: Overriding example
    A.m, B.m, C.m
    if A is correct, B is incorrect, C is maybe wrong
   - body of the local method may be incorrect
Remi: if the super type is correct but the subtype is not
Karen: preparation checks are NOT vs. the real type - they just check 
overrider/overridden - they could both be wrong and pass that check
Frederic: This is more complex with interfaces
Dan H: if never call method, want to continue to run, throw an exception when 
realize inconsistency
Dan S: alternative - hotspot implementation could perform the check early and 
cache and throw the exception at first invocation

AI: Karen - investigate possibilities including either delaying checking or 
offering the option to check earlier but delay throwing any exceptions
ed. note - sent follow-up email: started the exploration - too complex for LW1 
timeframe - asked for approval to keep proposal
for now and revisit after we get early access binaries into people’s hands

John: Constant_Class resolution - need to also check BootStrapMethod evaluation 
for indy and condy - spec says “as if by ldc”.

Karen: Issue 1: Note that it is possible for class A to declare a field of V, 
not know it is a value type, and class C to also not know
and to store null in the field, because field resolution only checks between 
the caller-callee, not reality.
Folks were ok with letting this work.

III. Static fields - flattenability

Karen summarized some of the issues and options outlined in the Value Types 
Consistency Checking:

 - risk of circularity errors if we pre-load static fields that are 
(flattenable) value types. Since there is a requirement to allow
a static field to contain an instance of the container type, we obviously can 
not pre-load.

 - Preparation time issues:
     - Preparation is prior to class initialization
     - challenge in creating a default value instance of a class which has not 
yet been initialized
 - theory is that you can’t actually get to the static without initializing the 
class

choices:
1. trigger class initialization early
2. prevent a leak

John: bytecodes and MH-like bytecodes know how to make a default instance 
before class initialization

Note: there is a risk of the default value instance escaping prior to 
initialization
— e.g. JVMTI - maybe spec bug - getFieldIDs/getMethodIDs - require a class to 
be prepared - should require a class to be initialized
(since the jfieldIDs/jmethodIDs will be used by JNI which requires the class to 
be initialized, and the getField/getStatic etc. JNI
methods do NOT ensure this for performance). This is a bug.

— JLS is explicit about hole during <clinit> that allows the initializer to 
create an instance of itself and publish it for external view
     - this is an actual problem

- Note that once the instance escapes - there are no class initialization 
barriers on bytecodes for instances - it is assumed that these
are caught at “new” or “defaultvalue”

Remi: agree with John - go ahead and initialize during preparation to a default 
value and do not trigger class initialization

Dan S: prefer get static trigger class initialization rather than preparation

John: concern about circularities for class initialization
Karen: circularities - only for class loading, not for initialization - logic 
explicitly allows same thread to “successfully” initialize if already
in initialization

Karen: class initialization of a container should trigger class initialization 
of all flattenable fields

John: any additional class initialization barriers for hiding default - e.g. 
anewarray
Preparation essentially creates storage, 

AI: Karen - double check potential JVMTI bug

Corrections welcome,
thanks,
Karen







Reply via email to