Performance impact of value type buffering for the interpreter
    Sergey Kuksenko 
    sergey.kuksenko at oracle.com
       
    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 
-XX:ValueTypesBufferMaxMemory=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