Skip to content

8.38.0

Latest

Choose a tag to compare

@autorelease3 autorelease3 released this 24 Jun 18:05
Immutable release. Only release title and notes can be modified.
8.38.0
ba1a28e

💡 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 by jdk.Deoptimization JFR events at com.fasterxml.jackson.databind.ser.BeanPropertyWriter if (_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