andreycha
@andreycha

synchronized в Java (Android)

Перелистывал записную книжку и обнаружил запись с семинара по Андроиду, из раздела советов по оптимизации, цитирую:

synchronized на new object[0] эффективнее, чем на new object

т.е. лучше лочить пустой массив объектов, чем сам объект.

Вопрос: почему?
  • Вопрос задан
  • 4643 просмотра
Пригласить эксперта
Ответы на вопрос 2
apangin
@apangin
Я точно знаю, что в Oracle VM синхронизация на Object и Object[0] ничем не отличается. Только что посмотрел исходники Dalvik VM — там то же самое. Массив объектов является частным случаем объекта, и функция dvmLockObject работает со всеми объектами одинаково.

Может, имелась в виду разница именно в операции new? При создании new Object() в байткоде присутствует вызов конструктора Object.<init>, в то время как у массива конструктора нет. Таким образом, в интерпретаторе new Object[0], действительно, будет быстрее. Однако с появлением JIT-компилятора в Anroid 2.2 пустой конструктор Object() не вызывается, и разницы опять никакой не будет.
Ответ написан
Комментировать
romik
@romik
Насчёт эффективности сомневаюсь, но может быть причина в том, что new Object[0] сериализуемый, а new Object() — нет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы