Насколько тяжелы мониторы Java?

Допустим, у меня есть массив из тысяч объектов и небольшое количество потоков, которые могут обращаться к каждому из объектов. Я хочу защитить доступ к одному из методов объекта. Самый простой способ - объявить этот метод как synchronized . Однако это может привести к созданию тысяч мониторов, каким бы способом они ни были реализованы. Если бы это был Win32, я бы никогда не создал тысячи объектов ядра, таких как Mutex, но CRITICAL_SECTIONs могли бы быть правдоподобными. Мне интересно, как обстоят дела с Java. Учитывая низкий шанс конкуренции, будет ли использование мониторов требовать большего, чем просто необходимый им объем памяти? Насколько распространена практика использования синхронизации с такой низкой степенью детализации в Java?

(Очевидно, что существуют обходные пути, такие как использование гораздо меньшего массива объектов синхронизации, доступ к которым будет осуществляться с помощью некоторого хэша. Я не ищу практического решение, я ищу понимание).

15
задан eran 1 November 2010 в 11:44
поделиться