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

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

Жестко, спасибо. Дык то есть внутри JDK бутстрапа "a"+"b" компилируется в `new StringBuilder().append("a").append("b")` и это медленнее чем переписывание вручную на `new StringBuilder(2).append("a").append("b")` ? И почему вы тогда не хотите, вместо переписывания всех внутренностей JDK на StringBuilder(length), пофиксить этот баг с неоптимальной компиляцией плюса? Шобы если "a"+"b" компилируется в StringBuilder а не в invokeDynamic, он бы уж компилировался в StringBuilder c правильным length?

Точно не знаю, вероятно, из-за возможных НПЕ в коде вроде:

int length = str1.length() + str2.length();
new StringBuilder().append(str1).append(str2).toString();

Было предложение заменять сложение строго двух строк явным вызовом str1.concat(str2), но тут во-первых нарушается требование спецификации о создании новой строки при сложении, во-вторых возможен НПЕ.

Это зависит от ОС, версии ява-машины, типа процессора? На Андроиде, например, такие же результаты будут?

Абсолютные числа, разумеется, зависят от процессора и версии JDK, в статье я как раз и привёл пример кода, который работает по-разному в зависимости от версии явы.

От оси соотношения между показателями по идее не должны зависеть (как и абсолютные значения).

Про Андроид точно сказать не могу, я никогда не разрабатывал под мобильные устройства. Если JDK и JRE там те же, что и на настольных машинах, то всё будет так же.

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

Публикации

Истории