|
|
|
I believe all the bootimages bloated up, but we're closer to the edge with 64 bit references so we didn't notice on the 32 bit platofrms.
A possible alternative is to abandon the strategy of putting literals directly in the jtoc and put them in segregated structures that are 1 load further away. That at least bounds the search time to be O(# of literals of the relevant type). For the idea of having different arrays we'd need 3. One for classes, one for strings and another for all other object literals. In the case of a class or string the search time would be bounded by the type, but for objects we'd still need to search all 3. I don't think there are any problems encoding the literal offset in the constant pool, we'd need to take care that we referenced the correct array when we had a particular type.
This isn't a huge worry to me, what I'm more concerned about is adding an indirection to get literals. I think searches occur much less frequently than a literal access, and the cost of a more expensive literal access may not be recouped by a faster search. Patch committed in r13964:
" I will keep an eye on the performance reports to see the impact this change has had. I will also watch PPC64 to see if it has resolved the issue. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1) bump the size up of the boot image
2) switch from using maps to find literals to a search of the JTOC. We've talked about doing this in the past. Searching the JTOC is rare so hopefully the speed difference between a map and a search is small. We'd need to order items in the JTOC into references that are literals and ones that are static fields.
(a guess as to why this didn't effect PPC32 is that the reference sizes are smaller, maybe compressed references would save the day)