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

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

Что-то поздновато про 9 рассказывать. Ну а вообще, лучше про подобные фичи смотреть доклады от их автора, а не какой-то сомнительный обзор.

Большинство джавистов сидит на JDK8, ведь 9 и 10 это не LTS релизы, на который не было смысла переходить. Так что ложка все еще к обеду

Об интересных и малоизвестных особенностях никогда не поздно узнать.
Не знаю что они изменили в JDK 9, но тесты куска кода
String message = "Hello";
     for (int i=0; i<25; i++)
     {
        message += i;
     }
     out.println(message);

Что в 8 что в 11 работают одинаково медленно и жрут очень много памяти. То что немного убыстрили в 11 — это есть и в основном связано что в JDK9 сделали хранение строк либо в байтах (если ASCII строка) либо в символах (для строк в других кодировках). Если проводить тест с ASCII символами, то памяти меньше расходуется, если с русскими — то так же как и в JDK8
Как вы измеряли сторость и потребление памяти?
Классически: System.currentTimeMillis() и через Runtime.
Такие тесты без применения JMH кажутся странными.
Почему? javap дает более точный результат чем реальное выполнение циклов?
В чем подвох? Неправильно работают внутренние процедуры/функции Java?
Подвов в методике проведения микробенчмарков.
Что реально даст подобное измерение на цикле в 25 итераций?
Посмотрите доклады Шепелева про методики оценки производительности кода.
Ну если мне ловить микросекунды, то да, наверное не правильный метод. Но если я запускаю цикл в 10 тысяч итераций, то этот метод нормально отображает неправильность поведения JVM при работе со строками. Мне не нужна точность, мне нужен показатель, что так делать нельзя.
В нормальном профилировании кода, все равно видно что где ты накосячил. А для показа, так делать нельзя, классический тупой подход подходит.
Просто в статье приводится пример что работает через StringBuffer, а в JDK 11 через какую то другую хрень, то я лично не увидел, что в JDK 11 это сработает быстрее.
Но вот классический пример с конкатенацией в цикле и с использованием StringBuilder наглядно показывает, что в JDK8 что в JDK11 лучше использовать StringBuilder в цикле, чем конкатенацию через "+" либо String.concat().
И ничего не поменялось в JDK11, и это видно из статьи. Да на микросекунду стало быстрей!

Смотря на то, как автор оригинала умудрился скомкать вывод javap, а в примерах с invokedynamic блок BootstrapMethods и вовсе потерять, крепнет уверенность в том, что эта статья не стоила сил, затраченных на перевод.


Для понимания вопроса гораздо полезнее посмотреть старенький доклад Шипилёва, на который есть ссылка в самом первом комментарии.

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