Dan, tracking via https://bugs.openjdk.java.net/browse/JDK-8205061
thanks, Karen > On Jul 9, 2018, at 2:50 PM, Karen Kinnear <karen.kinn...@oracle.com> wrote: > > > Many thanks for checking Dan and agreeing that this needs a spec fix. Working > on moving that forward. > > thanks, > Karen > >> On Jul 6, 2018, at 11:26 AM, Daniel Heidinga <daniel_heidi...@ca.ibm.com >> <mailto:daniel_heidi...@ca.ibm.com>> wrote: >> >> > AI: Karen - double check potential JVMTI bug >> >> I checked our code base for this and we have the same behaviour. Would be >> good to get this fixed at the spec level. >> >> --Dan >> >> ----- Original message ----- >> From: Karen Kinnear <karen.kinn...@oracle.com >> <mailto:karen.kinn...@oracle.com>> >> Sent by: "valhalla-spec-experts" >> <valhalla-spec-experts-boun...@openjdk.java.net >> <mailto:valhalla-spec-experts-boun...@openjdk.java.net>> >> To: valhalla-spec-experts <valhalla-spec-experts@openjdk.java.net >> <mailto:valhalla-spec-experts@openjdk.java.net>> >> Cc: >> Subject: Valhalla EG Notes June 20, 2018 >> Date: Fri, Jun 29, 2018 6:36 PM >> >> 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 >> >> <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 >> >> <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 >> >> >> >> >> >> >> >> >> >> >