#java #synchronization
#java #синхронизация
Вопрос:
Как блок синхронизации в производительности Java зависит от размера объекта, на котором выполняется синхронизация?
synchorized (lock) {
//some code here
}
Представьте, что блокировка может быть такой же, new Object()
какой она используется, или это может быть экземпляр неизменяемого класса, но с огромным количеством инициализированных полей.
Ответ №1:
synchronized
на размер объекта не влияет, поскольку это (небольшой) семафор на объекте, проблемы с производительностью связаны с тем, как несколько потоков обращаются к объекту, другими словами, с тем, как спроектировано приложение.
Комментарии:
1.
synchorized is not affected by the object size..
1
Ответ №2:
Производительность синхронизации не зависит от размера объекта, с которым выполняется синхронизация. Однако использование «большого» объекта для синхронизации может снизить производительность в других областях — во-первых, для его инициализации может потребоваться время, а во-вторых, это приведет к перегрузке памяти, вызывая больше сбоев страниц и т.д. (предполагая, что это не требуется вашему коду независимо от того, в каком случае нет смысла хранить дополнительный объект только для целей синхронизации).