Как стать автором
Обновить

Тысячи вещей, которые в Java стоило бы поправить с первой версии: большое интервью с Сергеем Куксенко из Oracle

Время на прочтение18 мин
Количество просмотров17K
Всего голосов 45: ↑44 и ↓1+43
Комментарии7

Комментарии 7

Спасибо за отличное интервью.


Олег: Интересно. Если взять, к примеру, какое-нибудь сообщество питонистов, то у них куда меньше культ производительности. Как получилось, что именно в нашем сообществе так происходит? Может, это вы спровоцировали культ перформанса своими докладами? Ты, Шипилев, Паньгин, Иванов и так далее.

Мне кажется, это очень интересный вопрос.


Во-первых, культ производительности определенно есть не только в Джаве: посмотрите доклады на конференциях по Go, С++, JavaScript — там тоже очень много докладов про производительность, и зачастую это самые посещаемые доклады.


Думаю, культ во многом связан с эго: "если я написал код быстрее, чем коллега, значит я круче/умнее". Посмотрите на заголовки проектов на Гитхабе: многие имеют вид "Fast(est) [Thing] for [Language]". Вдобавок, производительность относительно легко сравнивать.


Было бы интересно видеть в индустрии больше проектов с заголовками типа:


  • "Very robust [Thing] for [Language]"
  • "[Thing] for [Language] with minimum configuration parameters/completely automatic tuning"
  • "[Thing] for [Language] with minimum resource (disk/memory/network) usage". Такое, кстати, иногда встречается, хотя реже, чем "fastest". Например, люди любят писать очень компактные реализации libc, см. musl и друзей.
  • "[Thing] for [Language] with > 90% mutation testing coverage"
Во-первых, культ производительности определенно есть не только в Джаве: посмотрите доклады на конференциях по Go, С++, JavaScript — там тоже очень много докладов про производительность, и зачастую это самые посещаемые доклады.

Разве их устраивают не для того чтобы помериться «тем самым» с Java и Python?

Могу ответить на вопрос про Chronicle и OpenHFT. Они написаны на чистой Java без JNI, как и большинство подобных вещей.


Причины этому я вижу две. Во-первых JNI имеет оверхед и в целом работает как этакая заноза для JIT, которую ни заинлайнить, ни переместить.


Во-вторых потребуется компилировать и как-то поставлять бинарник. Точнее 3 бинарника, хотя бы для самых популярных платформ (Solaris — все ещё не редкость в больших конторах). Точнее 6 бинарников (32-bit для совместимости и 64-bit для производительности).


Когда пишешь такие вещи «для внутреннего пользования», то хотя-бы знаешь на чем оно будет запускаться...

Бинарник прямо в jar-ник пихается. Зачем что-то поставлять?
Смотрите к примеру xerial драйвер для sqllite.
Внутри скомпилированные бинарники для 12 платформ.

Так обычно и делают, но бинарник ещё нужно подключить к JVM. “Runtime.loadLibrary” требует файл на диске, а не абстрактный Stream. Обычно копируют в /tmp, но не факт что есть permissions. И что SecurityManager вообще что-то позволит грузить.


Обычно таких сложностей не возникает, но это все ограничивает универсальность либы.

Большое спасибо, очень интересное интервью!
Говорит: «Блин, ну что такое, я вот всё сделал, выложил, никто не ревьюит». Ну да, никто не ревьюит. Сейчас июль, половина джавовского офиса в отпусках. Вот выйдут из отпусков и проревьюят.

Уже сентябрь кончается, а воз и ныне там.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий