Performance impact of value type buffering for the interpreter
sergey.kuksenko at oracle.com
Thu Jul 27 00:49:54 UTC 2017
Sorry, I am a little bit late with this results.
Right now, I won't provide detailed report. I'll just describe findings.
Detailed report may be provided later by request.
To check "value type buffering" I did two comparisons:
- compare turned off vs turned on buffers
turn off used options: -XX:BigValueTypeThreshold=0
turn on used options: -XX:BigValueTypeThreshold=128
(the latter option is required because of I have benchmarks with
value types large than default big value threshold)
- compare vs without "value type buffering" (reverting the patch)
First of all I want to say that "value type buffering" definitely
reduces amount of GC allocation for value types in the interpreter.
At the same moment I have to admit that "value type buffering" has
negative impact to the interpreter performance.
1. turned off vs turned on buffers
Turning on caused slowdown for value types:
- "arrayfill" benchmarks: up to 10%
- "arraysum" benchmarks: up to 20%
- "traversal" benchmarks: up to 10% on small data sets and up 30%
on large data sets
2. Moreover, even turned off "value type buffering" causes general
slowdown ~5%-10% against reverted build.
- Looks like extra allocation of boxed value types in the interpreter
doesn't related to poor value types interpreter performance.
- Allocated boxed values are dying almost immediately and GC is pretty
well in dealing with minor collections.
More information about the valhalla-dev