Зачем синхронизировать на небольших объектах?

#java #synchronization

#java #синхронизация

Вопрос:

Как блок синхронизации в производительности Java зависит от размера объекта, на котором выполняется синхронизация?

 synchorized (lock) {
    //some code here
}
  

Представьте, что блокировка может быть такой же, new Object() какой она используется, или это может быть экземпляр неизменяемого класса, но с огромным количеством инициализированных полей.

Ответ №1:

synchronized на размер объекта не влияет, поскольку это (небольшой) семафор на объекте, проблемы с производительностью связаны с тем, как несколько потоков обращаются к объекту, другими словами, с тем, как спроектировано приложение.

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

1. synchorized is not affected by the object size.. 1

Ответ №2:

Производительность синхронизации не зависит от размера объекта, с которым выполняется синхронизация. Однако использование «большого» объекта для синхронизации может снизить производительность в других областях — во-первых, для его инициализации может потребоваться время, а во-вторых, это приведет к перегрузке памяти, вызывая больше сбоев страниц и т.д. (предполагая, что это не требуется вашему коду независимо от того, в каком случае нет смысла хранить дополнительный объект только для целей синхронизации).