Мне нужно сериализовать множество объектов в моем приложении с помощью Kryo. Некоторые из них представляют собой очень крупные графические объекты, другие - небольшие контейнеры с несколькими примитивами (но есть лот этих контейнеров). Эти процессы сериализации могут происходить в нескольких потоках одновременно (на разных элементах данных).Kryo: IdentityObjectIntMap.clear() производит огромную нагрузку на процессор
Согласно документации:
Kryo
экземпляр не поточно.- Создание нового экземпляра
Kryo
дорого.
Логический вывод для меня был иметь ThreadLocal<WeakReference<Kryo>>
, который действует в качестве кэша для инициализированных Kryo
экземпляров.
Однако JVisualVM теперь показывает мне, что метод com.esotericsoftware.kryo.util.IdentityObjectIntMap.clear()
потребляет 90% времени процессора (моего времени) моего приложения. Для меня это похоже на то, что Крио нужно как-то «перезагрузить» себя между процессами сериализации, и, судя по всему, эта операция довольно дорога.
Кто-нибудь знает, что может происходить здесь, и почему эта операция слишком сильно снижает производительность моего приложения или как я могу сделать лучше, чем с локальным слабым опорным кешем для Kryo
экземпляров?