On Mon, 10 Nov 2025 17:59:02 GMT, Chen Liang <[email protected]> wrote:

> There is currently no shortcut for fast equals for Method or Constructor. 
> While the comparison for declaring class, name (interned strings' identity), 
> and return type are very efficient with identity comparison, the comparison 
> for parameter type is not so much: We always have to iterate through every 
> parameter.
> 
> Luckily, even though we are burdened with the different method and 
> constructor instance due to setAccessible, their parameter type arrays are 
> shared most of the time; in particular, in the same root method/constructor 
> hierarchy, all instances share the same method object. Thus, we can perform a 
> `==` check on the incoming array to provide a fast path.
> 
> Benchmark numbers before and after:
> 
> Benchmark                                    Mode  Cnt  Score   Error  Units
> ExecutableCompareBenchmark.distinctParams    avgt    5  1.189 ± 0.024  ns/op
> ExecutableCompareBenchmark.equalMethods      avgt    5  2.449 ± 0.033  ns/op
> ExecutableCompareBenchmark.sameMethodObject  avgt    5  0.541 ± 0.027  ns/op
> 
> Benchmark                                    Mode  Cnt  Score   Error  Units
> ExecutableCompareBenchmark.distinctParams    avgt    5  1.186 ± 0.042  ns/op
> ExecutableCompareBenchmark.equalMethods      avgt    5  1.078 ± 0.049  ns/op
> ExecutableCompareBenchmark.sameMethodObject  avgt    5  0.395 ± 0.018  ns/op

Remi, are you talking about my optimization code or the == case in my benchmark?
I think the Method/Constructor equals implementations are already == heavy; it 
might not hurt that much with one more == before the array content comparisons.

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

PR Comment: https://git.openjdk.org/jdk/pull/28221#issuecomment-3514294668

Reply via email to