Разбираем, что такое циклические ссылки в объектных графах, чем они опасны для сериализации и как с ними справляться. Показано, как стандартные потоки Java —
ObjectOutputStream/
ObjectInputStream — автоматически отслеживают уже встреченные объекты и пишут ссылки (handles), предотвращая
StackOverflowError. Разберём подводные камни кастомной сериализации (
writeObject/
readObject,
defaultWriteObject/
defaultReadObject), а также стратегии обхода циклов при JSON: аннотации
@JsonIdentityInfo,
@JsonBackReference/
@JsonManagedReference, исключение полей через
transient и использование идентификаторов.