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