[resending; in an effort to produce a less garbled version]

Remi,

> On 26 Feb 2021, at 22:06, Remi Forax 
> <fo...@univ-mlv.fr<mailto:fo...@univ-mlv.fr>> wrote:
>
>[sent to both email list given it's not clear if it's an implementation issue 
>or a spec issue]
>
>There is a nice video of how the serialization of records works recently on 
>inside.java
>https://inside.java/2021/02/23/records-met-serialization/

Yes, this is a nice explanation of how record serialization works.

> In the video, Julia explains that the de-serialization works from bottom-up, 
> so what if the record instances are a linked list …
> answer: a stack overflow.

This reproducer fails on my machine with a StackOveflowException when 
serializing ( not de-serializing ).

It fails with:

Exception in thread "main" java.lang.StackOverflowError
  at 
java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1142)
  at 
java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1577)
  at 
java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1534)
  at 
java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1443)
  at 
java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1186)
  at 
java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1577)
  at 
java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1534)
  at 
java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1443)
  at 
java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1186)
  at 
java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1577)
  at 
java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1534)
  at 
java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1443)
  at 
java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1186)
  at 
java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1577)
  ...

The same is true if Link is a normal class ( not a record class ).

Records and normal classes share the same code path in OOS when serializing.

-Chris.

Reply via email to