On Thu, 3 Oct 2024 19:54:58 GMT, Andy Goryachev <ango...@openjdk.org> wrote:

>> It's an interesting suggestion, but it is not needed.  `javac` will already 
>> deduplicate these.
>> 
>> You can even verify that this is the case.  Use `javap` to decompile the 
>> class file with `javap -c <classname>`.  In there, `invokedynamic` is used 
>> to represent the lambda's.  It looks like this for example:
>> 
>>      120: invokedynamic #54,  0             // InvokeDynamic 
>> #1:test:(Lcom/sun/javafx/scene/control/behavior/ScrollPaneBehavior;)Ljava/util/function/Predicate;
>> 
>> Later on, you'll see another:
>> 
>>      152: invokedynamic #54,  0             // InvokeDynamic 
>> #1:test:(Lcom/sun/javafx/scene/control/behavior/ScrollPaneBehavior;)Ljava/util/function/Predicate;
>> 
>> What you can see here is that the same constant (# 54) is used to reference 
>> the method. So, there's no need to help the compiler here.
>
> hmmm... when I set up a breakpoint in Eclipse in KeyMapping:785 (after it 
> hits the ScrollPaneBehavior<init>) the value for `interceptor` changes
> 
> 
> interceptor= 0x0000007001340d50  (id=208)     
> interceptor= 0x00000070013411c0  (id=212)     
> interceptor= 0x0000007001341630  (id=216)     
> 
> 
> I think it's still creates a different lambda object.  (I recall testing this 
> assumption with some unit test a while back).

yep, it's a different object.  the constant you are referring to is just a name 
of the method, I think.  here:


public class AppTestLauncher {
    public static void main(String[] args) throws Throwable {
        Runnable a = AppTestLauncher::func;
        Runnable b = AppTestLauncher::func;
        System.out.println("a=" + a + " b=" + b + " == " + (a == b));
    }
    
    static void func() { }


outputs

`a=goryachev.apps.AppTestLauncher$$Lambda/0x000000f801008c78@16c0663d 
b=goryachev.apps.AppTestLauncher$$Lambda/0x000000f801008e90@23223dd8 == false
`

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/1582#discussion_r1786841867

Reply via email to