Dynamic Constants adoption IRL

Paul Sandoz paul.sandoz at oracle.com
Thu Apr 15 18:34:10 UTC 2021


A while back we also did experiments in the java source compiler, compiling non-capturing method refs or lambda expressions to condy rather than indy. This is more efficient for duplicates. It’s still in the condy-folding branch of the amber repo, but it never made it into the mainline, not sure why.

For more details see presentation at JVMLS 2018

  https://www.youtube.com/watch?v=knPSQyUtM4I&list=PLX8CzqL3ArzVnxC6PYxMlngEMv3W1pIkn&index=10

As Remi indicated it is anticipated condy will be used more in language translation strategies of future platform features.

I am not aware of any other JVM language runtimes using condy at the moment.

Paul.

> On Apr 15, 2021, at 9:17 AM, forax at univ-mlv.fr wrote:
> 
> ----- Mail original -----
>> De: "Maxim Degtyarev" <mdegtyarev at gmail.com>
>> À: "Remi Forax" <forax at univ-mlv.fr>
>> Cc: "amber-dev" <amber-dev at openjdk.java.net>
>> Envoyé: Jeudi 15 Avril 2021 17:53:05
>> Objet: Re: Dynamic Constants adoption IRL
> 
>> I'm asking about JEP 309: Dynamic Class-File Constants.
>> 
>> [1] https://openjdk.java.net/jeps/309
> 
> Ok, got it,
> given that it's not yet supported by Java the language (see [1]), it's not used a lot.
> 
> I know, it was used by an early prototype of jextract (Foreign Linker API of Panama) but jextract later switches to use lazy class loading instead because people did not want to use a jar without having a corresponding Java source code.
> 
> Now, condy is an integral part of the current strategy to implement generics over primitive class (Project Valhalla, see [2] for more detail).
> So if it goes as planned, a lot of Java classes that uses a parameterized type over a type variable like List<T> will contain a condy.
> 
> regards,
> Rémi
> 
> [1] https://bugs.openjdk.java.net/browse/JDK-8209964
> [2] http://cr.openjdk.java.net/~jrose/values/parametric-vm.pdf
> 
> 
> 
>> 
>> El jue, 15 abr 2021 a las 18:37, Remi Forax (<forax at univ-mlv.fr>) escribió:
>>> 
>>> ----- Mail original -----
>>>> De: "Maxim Degtyarev" <mdegtyarev at gmail.com>
>>>> À: "amber-dev" <amber-dev at openjdk.java.net>
>>>> Envoyé: Jeudi 15 Avril 2021 17:04:15
>>>> Objet: Dynamic Constants adoption IRL
>>> 
>>>> Hello,
>>>> 
>>>> Is there currently real-life examples of dynamic constants adoption in
>>>> programming languages targeting JVM or either libraries and
>>>> frameworks?
>>>> Or are there currently no projects using dynamic constants? Maybe any
>>>> planned in the future?
>>>> Quick googling was unsuccessful.
>>> 
>>> It depends what you mean by dynamic constant.
>>> For the VM, a simple static final field that is not a primitive types or String
>>> is a dynamic constant.
>>> 
>>> A lambda that doesn't capture any variable value is a dynamic constant.
>>> 
>>> A VarHandle, used for concurrency or by the Foreign Memory API is a dynamic
>>> constant, the same goes for the MethodHandles.
>>> 
>>> The Vector API relies on the VectorSpecies being a dynamic constant.
>>> 
>>> System.out and System.err, the ClassValue for a particular class, or
>>> Thread.currentThread() can all be seen as dynamic constants (but they are not
>>> constant for the JIT).
>>> 
>>> The classData of an hidden class is also a dynamic constant [1].
>>> 
>>> regards,
>>> Rémi
>>> 
>>> [1]
>>> https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/invoke/MethodHandles.html#classData(java.lang.invoke.MethodHandles.Lookup,java.lang.String,java.lang.Class)
>>> 



More information about the amber-dev mailing list