Using JdbcTest.testJoinFiveWay, I ran the query six times then I took the last 3 results as reported by intellij. I then repeated this 3 times.
After bench marking Janino, my prototype and using legacy java reflections, I found:
The prototype was a static code with out caching or cycle detection. I latter added cycle detection and caching, but the results were with in one standard deviation. So I didn't not follow up further.
I was doing the dispatch with instance of instead of scanning an array of known classes.
If janino compiler dispatch was changed to use instanceof, it would remove the requirement know all relnode subtypes.