All streams
Search
Write a publication
Pull to refresh
112
0
Дмитрий Думанский @doom369

Гребец и на дуде игрец

Send message
потому что альтернативный вариант без исключения затормаживает


Речь о
if (condition) return error_core;

?

И что за библиотека такая, где надо волноваться о таких мелочах?
Ну почему же, вдруг Вы укажете на некую лже-оптимизацию и это ускорит хикари. Все пользователи от этого выиграют.
А Вы можете в тикет ответить на гитхабе? Мне как-то не хочеться постоянно проксировать ответы =).
Автор хикари ответил Вам. И утверждает что одноклассники в 8 раз медленее, а не быстрее. К сожалению у меня нету приглоса, так что вот ответ github.com/brettwooldridge/HikariCP/issues/464#issuecomment-149141231
I benchmarked both ways when the code was written. This is faster 95% of the time. It only incurs overhead when the list is expanded — but that is a slow path anyway because of the memory copy.


github.com/brettwooldridge/HikariCP/issues/462
и тогда заголовок статьи про «самый быстрый пул соединений» — тем более надувательство.


Ну на момент написания статьи Вашего кода даже не было в репозитории. Так что — нет. Не надувательство.
как динамическое создание класса, с помощью javassist ускоряет работу 34 инструкций перед 35 инструкциями.


А как эти 2 вещи вообще связаны =)?
Давайте бенчмарки. А вдруг там ошибка =)?
JVM и так отлично оптимизирует StringBuilder.

String s = «aaa...»; //100500 chars
new StringBuilder().append(«1»).append(s).toString();


компилятор заоптимайзит в new char[1+s.length]. Опция — OptimizeStringConcat. Так что прирост очень сомнителен.
Я не говорил, что не JVM проверяет диапозоны массива.
Из ссылки выше:

if (index >= arr.length) {
break;
}


Речь об этом условии. Я так понимаю что автор Хикари избегает его. Так как выбрасывание эксепшена за жизнь пула происходит раз-два и все.
Кстати, книга уже устарела. В нетти много чего поменялось с тех пор. Ну и на некоторые вопросы там всеравно нету ответов =). Хотя судя по всему это пофиксят в следующей книге.
Ок, спасибо за развернутый ответ. Думаю автор просто не усложнял в контексте той статьи.
Стоиомсть try не важна, если пул живет месяцами и за этот месяц try вызывается пару раз для увеличения списка. В то время как add/remove выполняются каждую секунду сотни раз в случае нагруженности пула. Но это лишь мое предположение.
Ну я так понял, что цель всей той колбасы просто избежать условия
if (size < elements.length)

Вообще я задал вопрос автору. Так что подождем. Я так не оптимизирую, если что =).
Я ее прочитал =).
лимит задаётся совсем другими параметрами JVM

Так в статье и не про это. Просто мимоходом упоминается, что есть вот такая штука длина метода в байткодах для инлайнинга, дефолтная она 35 байткодов. Может Вас смутило слово «лимит»? Окей извиняюсь за плохой перевод.

Заодно и развеем миф invokestatic vs. invokevirtual:

А в статье не говорится что вызов invokestatic быстрее invokevirtual. Там говорится, что у JIT большей вохможностей по оптимизации в случае invokestatic.
это вовсе не лимит инлайнинга


А что же?

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity