Integrated: 8273278: Support XSLT on GraalVM Native Image--deterministic bytecode generation in XSLT

Jovan Stevanovic github.com+44313413+jovanstevanovic at openjdk.java.net
Fri Sep 10 19:16:51 UTC 2021


On Wed, 1 Sep 2021 13:28:34 GMT, Jovan Stevanovic <github.com+44313413+jovanstevanovic at openjdk.org> wrote:

> GraalVM Native Image supports loading classes at runtime if they are known during image build (class predefinition). This is achieved by the JVMTI agent that registers dynamically generated classes in a regular HotSpot run. The Native Image build uses these registered classes to embed them into the produced binary so they can be loaded at runtime. Loading at runtime is achieved by matching the unique hash of generated classes.
> 
> If the generated bytecode is unstable across runs, the generated native image can not match the hash of the runtime-generated bytecode to the pre-defined classes. The execution failure happens here:
>  https://github.com/oracle/graal/blob/master/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/PredefinedClassesSupport.java#L127-L131.
> 
> In XSLT the produced bytecode is unstable for the following reasons:
> 
> - Methods like ` HashMap#values` and `HashMap#keySet` result in different traversal orders of its elements yielding a different order of methods and fields.
> 
> - The default `Object#toString` includes the current memory reference of `com.sun.org.apache.xalan.internal.xsltc.compiler.Number` in the generated class.

This pull request has now been integrated.

Changeset: f690a01f
Author:    jovanstevanovic <jovan.stevanovic1 at outlook.com>
Committer: Joe Wang <joehw at openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/f690a01f1e5de4ace39aefad656cb7c99f9ec4e1
Stats:     23 lines in 4 files changed: 5 ins; 0 del; 18 mod

8273278: Support XSLT on GraalVM Native Image--deterministic bytecode generation in XSLT

Reviewed-by: joehw

-------------

PR: https://git.openjdk.java.net/jdk/pull/5331


More information about the core-libs-dev mailing list