Community
Participate
Working Groups
Build 3.5.M1 This issue has existed since day 1. The code generation relies on a method binding to tell its constant pool declaring class. This forces the compiler to instantiate a new binding each time the receiver type must be used instead of the target method declaring class. 1. This could be achieved by passing an extra argument to codeStream.invoke*(..) indicating the constantPool declaring class to use. 2. In the longer run, #codegenBinding slots may be discarded. 3. Same optimization could be applied to field bindings
Created attachment 112545 [details] Proposed patch for 3.5 it also contains fix for bug 128563
Patch only covers (1)
Created attachment 112568 [details] Better patch
Created attachment 112600 [details] Better patch /2
Created attachment 112663 [details] Better patch /3 also removed ForeachStatement need for iterator() method binding creation
Created attachment 112713 [details] Better patch /4
Forked (3) in separate bug 247612
Created attachment 112752 [details] Additional patch for (2)
Released for 3.5M3. Fixed
Note to verifiers: it will be hard to assess this bug, since it is a rewrite of an existing functionality. Need to check source code, for the absence of SourceTypeBinding.getUpdateMethodBinding(...) to check we are no longer constructing these bindings. Numbers from a performance run should also demonstrate the win.
Verified for 3.5M3 using I20081026-2000 build.