как правильно использовать concurrenthashmap? - PullRequest
2 голосов
/ 16 августа 2011

скажем, у меня много операций чтения и несколько операций записи, и объект, который будет помещен в карту, довольно «тяжелый» - инициализация такого объекта стоит больших затрат памяти / времени и т. Д.

как мне кодировать, чтобы использовать высокую производительность concurrenthashmap и обеспечить минимальные затраты на ненужную инициализацию этих кэшированных объектов.

образец кода приветствуется и очень признателен! Спасибо!

Ответы [ 3 ]

2 голосов
/ 16 августа 2011

Уверен, что гуава имеет именно то, что вы ищете, см. MapMaker.makeComputingMap .

1 голос
/ 16 августа 2011

Код в ConcurrentHashMap высоко оптимизирован - я бы просто использовал его.

Издержки параллелизма минимальны, если обновлений мало.Если во время чтения происходит операция записи, при создании временной копии внутреннего состояния возникают некоторые издержки, но в остальном разница в производительности незначительна.Я бы использовал предоставленный класс как есть, и только если вы обнаружите, что у вас проблемы с производительностью, , а затем изучите использование чего-то другого.

Обратите внимание, что стоимость инициализации не имеет отношения к производительности параллелизма,только операция добавления его на карту.

0 голосов
/ 16 августа 2011

Это зависит от ваших требований, но вы можете рассмотреть возможность использования Pool экземпляров для уменьшения количества экземпляров.Это повысит вашу производительность, если вы в настоящее время выбрасываете элементы с карты для сбора мусора, поэтому вместо GC вы помещаете их обратно в пул и повторно используете их позже.

...