ConcurrentHashMaps (CHM) - это тяжеловесные объекты, которые неэффективно сериализуются.Например.Почему вы хотите сериализовать всю информацию о блокировке?
Преобразование в промежуточный объект, такой как HashMap, Map, Set или даже toString (), намного эффективнее.
Конечно, наиболее эффективным являетсявообще не использовать поведение Serializable по умолчанию, а написать собственный интерфейс Externalizable, который дает вам полный контроль над содержимым буфера.
Например.- вот сериализованный пустой CHM:
¬í sr & java.util.concurrent.ConcurrentHashMapd ™ Þ ‡) = I сегментMaskI сегментShift [сегменты 1 [Ljava / util / concurrent / ConcurrentHashMap $ Segment; xp ur 1 [Ljava.util.concurrent.ConcurrentHashMap $ Segment; Rw? A2 ›9t xp sr .java.util.concurrent.ConcurrentHashMap $ Segment6LX«) = F loadFactorxr (java.util.concurrent.locks.ReentrantLockjU¨ ,,/ util / concurrent / locks / ReentrantLock $ Sync; xpsr 4java.util.concurrent.locks.ReentrantLock $ NonfairSynceˆ2çS {¿xr -java.util.concurrent.locks.ReentrantLock $ Sync¸ ¢ ”ªDZ | xr 5jur.locks.AbstractQueuedSynchronizerfU¨Cu? Rã I statexr 6java.util.concurrent.locks.Bbsq ~? @ sq ~ sq ~? @ sq ~ sq ~? @ sq ~ sq ~? @ sq ~ sq ~? @ sq ~ sq ~? @ sq ~ sq ~? @ sq ~ sq ~? @ sq ~ sq ~? @ sq ~ sq ~? @ sq ~ sq ~? @ ppx
Gross. Вот тот же CHM, сериализованный из toString ():
’ t {}
Выполнив небольшую работу по преобразованию, вы получите огромную экономию пропускной способности!