Skip to content

Non-deterministic behavior of SimpleGrayscaleImage.blur() due to JIT in OpenJDK 14.0.1 #4

@TheSentry

Description

@TheSentry

Today we found out that there seems to be a bug in the JIT implementation of OpenJDK 14.0.1 that makes the behavior of at least one method - SimpleGrayscaleImage.blur() - non-deterministic.

You can test and verify this by running the JUnit tests of this project with using OpenJDK 14.0.1 and the following tests "flicker", i.e. sometimes pass, but often don't pass. If you run all tests in RadialHashAlgorithmTest, then testHashEarth2 and testHashSerialization will flicker. If you run each of those test methods isolated by itself, it will succeed.

Also, the hash is not stable:

Exp :a3ff195b0048ac9be693c3a394a1bcb7ab9bb5b4baababa8c0a4b19daa9eb2a7aba2aea7af97ada3
Run1:a5ff1c5b0049ae9de895c5a596a3bdb8ad9db8b6bcadaea9c2a6b39faca0b4a9ada3b0a9b199afa5
Run5:a5fe1b5b0049ae9de895c5a596a3bdb8ad9db8b6bcadaea9c2a6b39eaca0b4a9ada3b0a9b199afa5

Both tests will pass consistently if the following VM parameters are passed when testing:

-XX:CompileCommand=exclude,com/pragone/jphash/image/SimpleGrayscaleImage,blur

Alternatively, you can use OpenJDK 13.

(Other JUnit tests fail, too, but they also fail with OpenJDK 13, so that is probably not related to JIT.)

We'll probably submit a bug report to OpenJDK soon.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions