jsoniter-scala
jsoniter-scala copied to clipboard
Cache results of default methods and reuse them during serialization to minimize allocations
Currently default methods are called on each encoding method call, for example:
private def e0(x: JsonCodecMakerSpec.this.Defaults, out: JsonWriter): Unit = if (x.ne(null))
{
out.writeObjectStart();
{
val v = x.s;
if (v.!=(Defaults.`<init>$default$1`))
{
out.writeNonEscapedAsciiKey("s");
out.writeVal(v)
}
else
()
};
{
val v = x.i;
if (v.!=(Defaults.`<init>$default$2`))
{
out.writeNonEscapedAsciiKey("i");
out.writeVal(v)
}
else
()
};
...
Should be:
private val dv0: String = Defaults.`<init>$default$1`
private val dv1: Int = Defaults.`<init>$default$2`
private def e0(x: JsonCodecMakerSpec.this.Defaults, out: JsonWriter): Unit = if (x.ne(null))
{
out.writeObjectStart();
{
val v = x.s;
if (v.!=(dv0))
{
out.writeNonEscapedAsciiKey("s");
out.writeVal(v)
}
else
()
};
{
val v = x.i;
if (v.!=(dv1))
{
out.writeNonEscapedAsciiKey("i");
out.writeVal(v)
}
else
()
};
WARNING: It should be done only for immutable values