Рубрика «jrg-java»

Пишем поиск подстроки лучше, чем в учебниках - 1

Жизнь инженера полна сюрпризов: особенно, когда приходится иметь дело с производительностью. Например, что произойдет, если попытаться запустить этот кусок Java-кода? Выглядит довольно невинно:

// Для использования String.repeat нужен JDK 11 и выше:
final var needle = "A".repeat(500000) + "B";
final var haystack = "A".repeat(1000000) + "B";
System.out.println(haystack.indexOf(needle));

Мы ждем, ждем, ждем… По крайней мере, на моем ноутбуке 2015 года c OpenJDK 13 поиск иголки в стоге сена занимает около минуты. Наша старая добрая JVM прошла сквозь десятилетия перформанс-тюнинга, в ней эффективно реализованы интринсики для String.indexOf и так далее. Что же могло пойти не так?

Это начало серии из нескольких статей, любезно предоставленных их автором, Linas Medžiūnas, и изначально опубликованых в блоге WiX Engineering.

Читать полностью »

Java-дайджест за 10 марта - 1

  • Есть такая штука, Milkman — это альтернатива Postman, расширяемый воркбенч для работы с запросами и ответами с интерфейсом на JavaFx и с идеей «всё есть плагин». Несмотря на плагинную архитектуру, эта штука почти не использует reflection, и поэтому стало возможно пересобрать её как бинарник GraalVM Native Image. Плагины, конечно, нельзя добавлять в рантайме — что собрал, то и будет. Сборка делается через Maven. Обсуждение в документации — по ссылке. Не обошлось и без ложки дегтя: так же как пользователи GNU/Linux называют операционную систему просто (и неправильно) «Linux», здесь автор Milkman написал просто «Graal» вместо «GraalVM» — пришлось пойти и создать тикет на исправление этой несправедливости.
  • В прошлом декабре появился новый язык для JVM под названием Concurnas. На нем можно писать что угодно, но заточен он для легкого и приятного создания многопоточных, распределенных и параллельных систем. Сейчас вышла версия 1.14.020: в ней поправлены баги с escape-символами в REPL, там же добавлены номера строк, добавлены инструменты по работе со строками вроде взятия буквы по индексу (их не было?!), методы и функции теперь можно красиво печатать с помощью toString, добавлена совместимость с JDK 11 (теперь поддерживаются JDK 8-13).

Читать полностью »

В октябре в Санкт-Петербурге прошла хардкорная конференция Joker 2019, и уже много про нее написано («Joker 2019: триумф года», «Чем нам запомнилась последняя JokerConf», «Атакуем Joker 2019 полностью: как прошла самая крупная Java-конференция в России»), и фоточки уже доступны. Обратная связь собрана, итоги подведены, и самое время поудобней усесться в кресле и посмотреть десятку лучших докладов с конференции.

Топ лучших докладов Joker 2019 - 1
Ссылка на плейлист с открытыми докладами — под катом.Читать полностью »

Java-дайджест за 28 января - 1

  • Вышел JUnit 5.6. Добавлены any() и none(), чтобы запускать тесты без каких-то дополнительных тэгов, ReflectionSupport.findNestedClasses() может находить циклы в иерархии внутренних классов, TestExecutionSummary.Failure можно сериализовывать, и все в таком духе. Интересно, что если раньше ошибки логировали и прятали, то теперь в явном виде выбрасывают в ходе сканирования тестов (но можно вернуть старое поведение, установив параметр junit.platform.discovery.listener.default).

  • В Maven Central Читать полностью »

Продолжаем разбираться с работой GraalVM, и на этот раз у нас перевод статьи Aleksandar Prokopec «Under the hood of GraalVM JIT optimizations», изначально опубликованной в блоге на Medium. В статье есть несколько интересных ссылок, позже мы постараемся перевести и эти статьи.

Что под капотом компиляторных оптимизаций GraalVM? - 1


В прошлый раз на Medium мы рассматривали вопросы производительности Java Streams API на GraalVM в сравнении с Java HotSpot VM. GraalVM отличается высокой производительностью, и в тех экспериментах мы достигли ускорения от 1.7 до 5 раз. Конечно, конкретные значения выигрыша в производительности всегда будут зависеть от запускаемого кода и нагрузочных данных, поэтому, прежде чем делать какие-то выводы, стоит самостоятельно попробовать запустить ваш код на GraalVM.

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

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js