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.