Периодически сталкиваюсь с 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-а. Однако
нет. Может кто-то где-то видел каталогизированный сборник таких примеров? Я, конечно, понимаю, что можно потратить пару лет жизни на просмотр всех докладов и блог-постов Шипилёва