Details
-
Type:
Bug
-
Status:
Open
-
Priority:
Blocker
-
Resolution: Unresolved
-
Affects Version/s: JRuby 1.7.0.pre1
-
Fix Version/s: None
-
Component/s: Compiler
-
Labels:None
-
Number of attachments :
Description
I'm not sure the reason for this, but using the benchmark from JRUBY-6276, it appears that non-invokedynamic constant lookup performance on Java 6 has degrade in JRuby 1.7. We need to look into this before release, since it appears to be as much as 2x slower.
JRuby 1.7 on Java 7:
user system total real bar1 A in super: 5.473000 0.000000 5.473000 ( 5.473000) bar2 A in super: 5.363000 0.000000 5.363000 ( 5.363000) bar1 C: 6.091000 0.000000 6.091000 ( 6.091000) bar2 C: 5.952000 0.000000 5.952000 ( 5.952000) bar1 I: 6.875000 0.000000 6.875000 ( 6.875000) bar2 I: 7.184000 0.000000 7.184000 ( 7.185000)
JRuby 1.7 on Java 6:
user system total real bar1 A in super: 7.951000 0.000000 7.951000 ( 7.951000) bar2 A in super: 8.416000 0.000000 8.416000 ( 8.416000) bar1 C: 11.433000 0.000000 11.433000 ( 11.433000) bar2 C: 12.246000 0.000000 12.246000 ( 12.246000) bar1 I: 22.286000 0.000000 22.286000 ( 22.286000) bar2 I: 23.562000 0.000000 23.562000 ( 23.562000)
Still appears to be an issue. I investigated the invalidator: it's using object identity, so there should not be any excessive object creation. I also tried removing the volatile from its field, but it did not have any effect.
It could be that the extra levels of indirection to get at the constant generation are to blame, and we might not be able to avoid that while supporting invokedynamic and non-invokedynamic constant lookup.
Remarking for 1.7.0.