There are multiple compilation bailouts in C1 when running octane/nashorn.
For example, Box2D has
NMethodSizeLimit is what guides the compiler.
My observations during quick experiments with changing the limit (512k, Box2D on linux-amd64):
* default value:
- 1st iteration: 9-10s
- <1s: ~9-10th iteration:
- <100ms: ~100-110th iteration
* increase to 2M:
- bailouts are completely eliminated;
- warmup slows down:
- 1st: 10-11s; <1s: 15-20th iteration; <100ms: 110-120th iteration
* decrease to 128K:
- 4x more bailouts
- at the beginning, slightly improves warmup, but introduces plateau on a higher level (~130-150ms till ~130-140th iter):
- 1st: ~9s; <1s: 7-8th; <100ms: 140th
It seems heavy compilations can stuck compiling and considerably reduce code generation throughput on levels 1/2/3, which negatively impacts application warmup. On the other hand, using interpreter more (due to more bailouts) gives slight improvements during first dozen iterations, it considerably worsen performance until C2 kicks in.