DMN Parse / Deploy Time (Java 8 vs Java 11)

Hi,

I did some performance checks for the Camunda BPM DmnEngine in version 7.10.0 and noticed that the time it takes to parse big (I deployed decision tables with up to 6000 rules per decision table) .dmn-files is not linear and takes very long in Java 8, while it runs quite fast in Java 11.

If you want to see the benchmark project, you can check it out: GitHub - vampyr09/camunda-dmn-benchmark: Benchmark project for Camunda DMN.

The result is running the benchmark with Java 8.0_212 it takes around 68 seconds to parse the decision table with 4800 rules. When running the same benchmark with Java 11.0.3 it takes < 1 second to parse the decision table with 4800 rules.

Full benchmark results

With Java 11.0.3

Benchmark Rules ms/op iterations
parseDecisions 300 66,4 +/- 19,3 20
parseDecisions 600 88,7 +/- 13,9 20
parseDecisions 1200 154,0 +/- 17,7 20
parseDecisions 2400 375,0 +/- 46,9 20
parseDecisions 4800 757,3 +/- 85,4 20

With Java 8.0_212

Benchmark Rules ms/op iterations
parseDecisions 300 139,1 +/- 8,8 20
parseDecisions 600 448,1 +/- 15,9 20
parseDecisions 1200 1824,7 +/- 281,5 20
parseDecisions 2400 11629,6 +/- 2801 20
parseDecisions 4800 68730 +/- … 5 canceled

Our only guess was that the new Garbage Collector was the reason for this performance improvement, but running the benchmark in Java 8 with the G1GC garbage collector was still slow and running the benchmark in Java 11 with the ParallelGC was still fast. So this should not be the reason for it.

Do you have any possible explanation for this performance difference?

Thank you in advance.

1 Like

No opinions, feelings or something else? No relevance? Or is my question to vague?