💡 Improvements
-
Adds a JacksonWarmup type that serializes a representative set of payload shapes through fresh server and dialogue/client ObjectMappers (constructed via the same conjure-java factories used at runtime) so the JIT settles on the bimorphic BeanPropertyWriter.serializeAsField branch (typed vs untyped serializer) with full type-profile coverage before customer traffic perturbs it.
This works around OpenJDK C2 JIT deoptimization storm where uncommon_trap isnonnull triggers continuous deoptimization as seen in https://bugs.openjdk.org/browse/JDK-8330258 &
https://bugs.openjdk.org/browse/JDK-8374307 . The repeated deoptimization can be observed byjdk.DeoptimizationJFR events atcom.fasterxml.jackson.databind.ser.BeanPropertyWriterif (_typeSerializer == null)site, and then re-enters unstable_if deopt thrash on the JSON serialization path when a perturbing workload arrives.The warmup payloads interleave monomorphic fields (concrete types) with polymorphic fields (sealed interface +
@JsonTypeInfo) in the same object so each iteration exercises both branches, letting C2 record a bimorphic profile during the warmup pass.Warmup failures are caught and logged rather than aborting as a degraded JIT profile is preferable to refusing to serve traffic. (#3512)
Full Changelog: 8.37.0...8.38.0