Список неочевидных оптимизаций JVM
От: vsb Казахстан  
Дата: 14.02.19 20:16
Оценка:
Периодически сталкиваюсь с WTF-моментами, которые оказываются результатом того, что JVM Hotspot распознаёт некоторые паттерны кода и имеет специальные оптимизации для этих паттернов. Два примера:
StringBuilder sb = new StringBuilder();
sb.append("abc").append("def"); // эта строка быстрей
sb.append("abc"); sb.append("def"); // эта строка медленней

List<MyClass> list = ...;
MyClass[] arr;
arr = list.toArray(new MyClass[0]); // эта строка быстрей
arr = list.toArray(new MyClass[list.length()]); // эта строка медленней


Второй пример и вовсе контр-интуитивный. Если посмотреть в реализацию метода toArray, то там при недостаточном размере с помощью reflection создаётся новый массив нужного размера, поэтому ожидается, что вторая строка будет работать быстрей, т.к. там никаких реаллокаций и массив создаётся заранее с помощью правильных инструкций, а не reflection-а. Однако нет. Может кто-то где-то видел каталогизированный сборник таких примеров? Я, конечно, понимаю, что можно потратить пару лет жизни на просмотр всех докладов и блог-постов Шипилёва
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.