Performance impact of value type buffering for the interpreter

Sergey Kuksenko sergey.kuksenko at
Thu Jul 27 00:49:54 UTC 2017

Hi All,

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.

Some thoughts:
- 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.

Best regards,
Sergey Kuksenko

More information about the valhalla-dev mailing list