Pull to refresh

Немного про повторное использование объектов

Reading time 1 min
Views 2.5K
Недавно я наткнулся на блог, который ведет Peter Lawrey. Там можно найти интересную информацию, которая касается производительности кода под JVM.

Там я нашел непривычный подход, который состоит в повторном использовании объектов. Непривычен он по нескольким причинам:
  • Общепринятое мнение, что создание объектов сейчас настолько быстрое, что не стоит обращать на него внимание
  • Этот подход редко где используется, и на это должны быть причины.


Но существует область, где преимущества этой концепции можно заметить. Это сериализация (вернее, десериализация) объектов. Дело в том, что в этом случае происходит постоянное создание новых объектов, что негативно сказывается на производительности. Более того, этот процесс вытесняет данные из кешей CPU.

По ссылочке можно найти код теста (на Kotlin :trollface:). Код производит десериализацию коллекции объектов из ByteBuffer. Результаты отсортированы по возрастанию.



Как можно заметить, десериализация занимает больше времени, когда приходится создавать новые объекты. Иногда, разница весьма ощутима. Хотя, это не удивительно, что создание новых объектов означает большие накладные расходы и более частые срабатывая GC.



На этом графике показаны наихудшие 5%. Разница объясняется срабатыванием GC.
Tags:
Hubs:
+6
Comments 4
Comments Comments 4

Articles