JVMTI RedefineClasses spec handling of private methods is being tracked via: https://bugs.openjdk.java.net/browse/JDK-8192936
thanks, Karen > On Feb 20, 2018, at 10:52 AM, Karen Kinnear <karen.kinn...@oracle.com> wrote: > > attendees: Tobi, Mr Simms, Dan H, Dan S, Frederic, Remi, Karen > > I. Condy > > 1. Condy reference implementation was pushed last week into JDK 11. > > 2. StackOverFlow handling/future LDC early cycle detection > Dan S walked us through his StackOverFlow JVMS clarification for condy, > specifically the ordering of resolution > prior to throwing StackOverFlowError for JDK11 initial Condy release > > http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2018-February/000560.html > > AI: implementors - check if this clarification matches implementable behavior > > Dan: also described an incremental ldc early detection circularity proposal > - not requiring candy’s to refer to entries earlier in the classfile > - not depending on an attribute to keep current during retransformation > - assume earlier references are the common case, so that is fastest > - still work if not in order - need to do static cycle tracking - so slower > > question for ASM users - e.g. JRuby, Groovy - as they add Condy support - how > often do they need forward references? > > AI: all - double-check implementation implications > Dan S - if you want to ask Charlie Nutter to let us know for JRuby going > forward ... > > post-meeting Update from Dan Smith: > http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2018-February/000570.html > > AI: All - check if works for ASM and implementors > > 3. Planned uses for condy in jdk? > - Nothing in imminent plans > - expect longer term constant Lambdas to use condy - lightweight > - future: still exploring APIs for constants, switch, pattern match, … > > Remi: Python, JRuby - all lambdas are constant > Remi: wants support in javac behind a flag > Dan S: it is in Amber > Remi: wants a binary :-) - Dan S will pass on that message > > > II. Nestmates > > 1. Lookup handling > AI: Karen to send email with details > - here it is: > http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2018-February/000567.html > > Note: javac will not be generating bridges for private members when nestmate > support goes into JDK 11 (soon) > protected members will still require bridges > > 2. Spec updates to JVM Ti, JDWP, JDI, java.lang.instrument > http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2018-February/000541.html > > Request to update JVMTI retransformation to describe ability to add private > methods. Recognize this > is independent of Nestmates, but perhaps overdue if we intend this to be > supported behavior. > > AI: Karen - review with past owners of JVMTI specification changes. > > III. Value Types > > Latest LWorld Value Types proposal: > http://cr.openjdk.java.net/~acorn/LWorldValueTypesFeb13.pdf > Latest rough draft JVMS: > http://cr.openjdk.java.net/~fparain/L-world/L-World-JVMS-4b.pdf > > Feedback/Q&A: > > 1. creation of a new value type - Remi > - why not vnew ? why default/withfield/withfield/withfield? > - transformations - e.g. Byteman - easier if arguments are on the stack > > Frederic: First proposal had a factory bytecode, returning a single fully > constructed value type > rejected: concern: cost of pushing all arguments, method signature and > attribute to how signature maps to fields > > Dan S: declared fields do not have an inherit ordering, so e.g. attribute to > identify order > - expected usage: factory method in the value class itself > > Dan: also want withfield exposed at the language level to allow tweaking one > thing > > Karen: would be helpful to have a single way to create a value type or an > object to allow more shared code > - model is to move all toward a factory mechanism > > Frederic: > - inside factory - it is not the same bytecodes for value type and object > type creation > - note: withfield returns a new value type - it does not have the same > stack behavior as putfield > > Dan H: factory proposal is better than defaultvalue/withfield > - less throwing away extra created value types for the interpreter > > Needs more discussion > > 2. what does verifier / class file format checker need to do in JVMS? > from LWorld Value Type pdf > > Can verifier check bytecode validity? No - we do not want to eagerly load > class files, so it doesn’t know if > a bytecode is being applied to a value type or an object identity type > > AI: Karen - make sure the “what can javac do for you?” static verification is > added to static checking, probably > ClassFileFormatError > > 3. withfield handling > Remi: why withfield? > Frederic: goal is to allow loop iteration with low cost > Remi: why restrict to within the value class itself? > > Karen: concern: this creates a new value type, think of it as CopyOnWrite, it > does NOT go through final > and update an existing value type. So this is heavyweight > > Remi: could we have the language decide restrictions on its usage rather than > the JVMS? > > Dan S: future - if we want a general purpose withfield - we may want to put > that in with extended > field access controls - e.g. separate read vs. write. At that time you could > use withfield if the field were > accessible. > - e.g. with Records - may expose readability, not availability > > Frederic: concern about confusing people - withfield with an immutable object > > Dan S: language could make this clearer that this is not an assignment, but > is a “new” > > Opinions? > > 4. arrays > We need a new bytecode to create a flattenable/non-nullable array > existing bytecodes do not create flattenable arrays with the new model of > container marking flattenable > rather than by type > > note: if a field is marked as ACC_FLATTENABLE and you load the field and it > is not a value type -> ICCE > > Dan S: initial value could indicate if this is flattenable or not > Remi: C++ does this - it is not a good thing > Karen: we do not want to have to pre-load the type to determine if it is > flattenable, we require the field access flag > in order to require pre-loading > > 5. Arrays and nullability > > Question: can you pass a VT[] where an Object[] is expected? > Yes you can pass the argument, and sub typing works. > > Frederic: If you have an Object[], if you have non-flattenable values then > elements are nullable, if you have flattenable values, then elements are not > nullable > > 5. Generics and nullability > > Dan S: With generics, value types will work as is. > In future, if we were to change a field to be non-nullable, then we could > get NullPointerExceptions > Karen: if we were to change a field to be non-nullable, then if we wanted to > we could support a different layout, > and that would require specialization if the field were non-nullable > depending on the parameter type. > > This is a current open challenge - how to handle migration to non-nullable > fields and arrays > Note that in future we might want non-nullable identity objects as well as > value types. > > To help migration, Brian would like us to find a way so that javac would > detect a mismatch in expectations of nullability, > so we catch them at compile time. > > Corrections welcome, > thanks, > Karen > > > > > > > > >