- Статус
- Онлайн
- Регистрация
- 5 Июн 2025
- Сообщения
- 581
- Реакции
- 32
Ладно если-б было какое-то объяснение...Советую почитать про то как JIT оптимизирует вызовы в особенности invokedynamic. Так же существует такая вещь как LambdaMetaFactory.
Почитал про JIT, понял что ошибался на счет лямбд и конкретно Metafactory. Решил прогнать грубый бенчмарк и... На самом деле удивился что код практически идентичен по производительности моему примеру который я выкидывал на гит(если предварительно убрать локи, что я кстати тоже понял только при прогонах бенчмарка).
Докинув в свою шину вызовы методов через invokeExact - получил небольшой буст и по цифрам получилось даже чуть получше чем с invoke обёрнутым через metafactory. Я так понимаю что в любом случае что invokedynamic что invokevirtual JIT компилирует до одного и того-же примерно "места", где перф фактически не сильно отличается. Это всё чисто мои логические выводы, мб попозже спрошу чела который действительно разбирается в нюансах работы JIT, но по сути как будто бы тут не то что-бы есть разница между LambdaMetafactory и простыми классами заглушками. Единственное что кажется действительно даст буст - так это использовать сгенерированные классы, тут я бенчмарк не делал, но думаю что прирост не должен быть супер большим, т.к. фактически его отличие это отсутствие MethodHandles лукапов и вызова через этот-же MethodHandles
p.s. забыл приложить бенчмарк(опять-же грубый), в случае UebusBenchmark - шина событий без Reentrant Lock'ов
| Benchmark | (iterations) | Mode | Cnt | Score | Error | Units |
| MetafactoryBusBenchmark.benchmark | 100 | thrpt | 25 | 1134,768 | ± 29,950 | ops/us |
| MetafactoryBusBenchmark.benchmark | 200 | thrpt | 25 | 1064,786 | ± 58,833 | ops/us |
| MetafactoryBusBenchmark.benchmark | 1000 | thrpt | 25 | 1075,534 | ± 6,610 | ops/us |
| UebusBenchmark.benchmark | 100 | thrpt | 25 | 1200,214 | ± 4,959 | ops/us |
| UebusBenchmark.benchmark | 200 | thrpt | 25 | 1201,587 | ± 5,934 | ops/us |
| UebusBenchmark.benchmark | 1000 | thrpt | 25 | 1212,252 | ± 11,764 | ops/us |
Последнее редактирование: