В проекте, над которым я сейчас работаю, есть много объектов, которые сериализуются, чтобы получить полную копию существующего объекта.Это работает нормально, пока у нас не будет нескольких вызовов во время выполнения, в некоторых случаях у нас будет 100, 200 или даже 1000 вызовов между компонентами, и именно здесь мы сталкиваемся с головной болью производительности.
Историческая причина копирования этих объектов клонированазаключается в том, что два разных компонента, работающие над одними и теми же объектами с разными функциональными возможностями, не должны изменять друг друга, например, изменения в пользовательском интерфейсе Swing не должны изменять значения объектов в бэкэнде до тех пор, пока не будет нажата кнопка сохранения или синхронизированная.
У нас довольно большойкодовая база, я думал, что если я напишу клон на основе отражения, он будет работать быстрее по сравнению с сериализацией, но либо из-за наших сложных иерархий объектов, либо по какой-то другой причине, этот подход еще медленнее.
Я также попытался использовать CloneUtils (проект sourceforge), который также работает медленнее (мы вообще не используем Hibernate).Spring BeanUtils не является опцией (я предполагаю из документов, что он использует только bean-компоненты, то есть самоанализ, и в случае, если я использую его, если какие-либо поля предоставляются с использованием нестандартного метода доступа, мы не сможем их скопировать).
Есть у кого-нибудь идеи, улучшить производительность, все еще работая над разными копиями.У нас есть опция, которая ускорит процесс в случае, если мы обеспечим наши собственные методы копирования вместо сериализации, но у этого есть обратная сторона - обновлять эти методы каждый раз, и если мы забудем, мы можем потерять функциональность.