+        if (nameMap == null) {
+            nameMap = new HashMap<>(2);

What is the typical size the map ends up with? If it stays this small linearly 
searching an Array (or „last value“) may be faster.

If the map typically grows more than a few entries having some more initial 
buckets will decrease collissions and avoid resizes. Especially considering the 
fact that HashMap is a rather fat object, it does not hurt to start with a 
bigger initial table. Does the lazy initialisation actually help anything?

Single entry alternative
----------------
Object lastClass; String lastName;

If (lastClass == c)
  return lastName;
lastClass = c;
lastName = c.getName().replace(‘.‘, ‘/‘);
return lastName;

(or make it a x Slot Version…):
-------------------
Object tab_obj = new tab_obj[8];
String tab_val = new String[8];

for(int i=0; i < tab_obj.length; i++)
{
  If (tab_obj[i] == c);
    return tab_val[i];
}
i = (i+1 % tab_obj.length);
tab_obj[i] = c;
return (tab_val[i] = c.getName().replace());

(not sure about the concurrent semantics and having this static may actually 
help)

Gruss
Bernd
-- 
http://bernd.eckenfels.net

Von: Claes Redestad
Gesendet: Donnerstag, 1. März 2018 16:15
An: core-libs-dev
Betreff: RFR: 8198888: Reduce string allocation churn inInvokerBytecodeGenerator

Hi,

two trivial optimizations that get rid of a few percent on ISC startup 
tests.

Webrev: http://cr.openjdk.java.net/~redestad/8198888/jdk.00/
Bug: https://bugs.openjdk.java.net/browse/JDK-8198888

Thanks!

/Claes

Reply via email to