You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sj...@apache.org on 2008/08/26 16:23:30 UTC
svn commit: r689092 - in
/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200:
CpBands.java bytecode/ClassConstantPool.java bytecode/forms/ByteCodeForm.java
Author: sjanuary
Date: Tue Aug 26 07:23:30 2008
New Revision: 689092
URL: http://svn.apache.org/viewvc?rev=689092&view=rev
Log:
Apply patch for HARMONY-5928 ([classlib][pack200][performance] java.util.HashMap usage optimization)
Modified:
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/CpBands.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/bytecode/ClassConstantPool.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/bytecode/forms/ByteCodeForm.java
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/CpBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/CpBands.java?rev=689092&r1=689091&r2=689092&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/CpBands.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/CpBands.java Tue Aug 26 07:23:30 2008
@@ -20,6 +20,7 @@
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Map;
import org.apache.harmony.pack200.Codec;
import org.apache.harmony.pack200.Pack200Exception;
@@ -73,19 +74,21 @@
private int[] cpStringInts;
private String[] cpUTF8;
- private final HashMap stringsToCPUTF8 = new HashMap();
- private final HashMap stringsToCPStrings = new HashMap();
- private final HashMap longsToCPLongs = new HashMap();
- private final HashMap integersToCPIntegers = new HashMap();
- private final HashMap floatsToCPFloats = new HashMap();
- private final HashMap stringsToCPClass = new HashMap();
- private final HashMap doublesToCPDoubles = new HashMap();
- private final HashMap descriptorsToCPNameAndTypes = new HashMap();
-
- private HashMap mapClass = new HashMap();
- private HashMap mapDescriptor = new HashMap();
- private HashMap mapUTF8 = new HashMap();
- private HashMap mapSignature = new HashMap();
+ private final Map stringsToCPUTF8 = new HashMap();
+ private final Map stringsToCPStrings = new HashMap();
+ private final Map longsToCPLongs = new HashMap();
+ private final Map integersToCPIntegers = new HashMap();
+ private final Map floatsToCPFloats = new HashMap();
+ private final Map stringsToCPClass = new HashMap();
+ private final Map doublesToCPDoubles = new HashMap();
+ private final Map descriptorsToCPNameAndTypes = new HashMap();
+
+ private Map mapClass;
+ private Map mapDescriptor;
+ private Map mapUTF8;
+
+// TODO: Not used
+// private Map mapSignature;
private int intOffset;
private int floatOffset;
@@ -151,6 +154,7 @@
int cpClassCount = header.getCpClassCount();
cpClassInts = decodeBandInt("cp_Class", in, Codec.UDELTA5, cpClassCount);
cpClass = new String[cpClassCount];
+ mapClass = new HashMap(cpClassCount);
for (int i = 0; i < cpClassCount; i++) {
cpClass[i] = cpUTF8[cpClassInts[i]];
mapClass.put(cpClass[i], new Integer(i));
@@ -184,6 +188,7 @@
String[] cpDescriptorTypes = getReferences(cpDescriptorTypeInts,
cpSignature);
cpDescriptor = new String[cpDescriptorCount];
+ mapDescriptor = new HashMap(cpDescriptorCount);
for (int i = 0; i < cpDescriptorCount; i++) {
cpDescriptor[i] = cpDescriptorNames[i] + ":" + cpDescriptorTypes[i]; //$NON-NLS-1$
mapDescriptor.put(cpDescriptor[i], new Integer(i));
@@ -401,6 +406,7 @@
Pack200Exception {
int cpUTF8Count = header.getCpUTF8Count();
cpUTF8 = new String[cpUTF8Count];
+ mapUTF8 = new HashMap(cpUTF8Count+1);
cpUTF8[0] = ""; //$NON-NLS-1$
mapUTF8.put("", new Integer(0));
int[] prefix = decodeBandInt("cpUTF8Prefix", in, Codec.DELTA5,
@@ -547,9 +553,10 @@
if(index != null) {
return cpUTF8Value(index.intValue());
}
- if(searchForIndex) {
- index = (Integer)mapSignature.get(string);
- }
+// TODO: mapSignature is not filled anywhere
+// if(searchForIndex) {
+// index = (Integer)mapSignature.get(string);
+// }
if(index != null) {
return cpSignatureValue(index.intValue());
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/bytecode/ClassConstantPool.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/bytecode/ClassConstantPool.java?rev=689092&r1=689091&r2=689092&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/bytecode/ClassConstantPool.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/bytecode/ClassConstantPool.java Tue Aug 26 07:23:30 2008
@@ -243,7 +243,7 @@
// copy over and rebuild the cache
//
- indexCache = new HashMap();
+ indexCache = new HashMap(entries.size());
int index = 0;
entries.clear();
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/bytecode/forms/ByteCodeForm.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/bytecode/forms/ByteCodeForm.java?rev=689092&r1=689091&r2=689092&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/bytecode/forms/ByteCodeForm.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/bytecode/forms/ByteCodeForm.java Tue Aug 26 07:23:30 2008
@@ -59,9 +59,9 @@
protected static final boolean WIDENED = true;
- protected static final Map byteCodes = new HashMap();
+ protected static final ByteCodeForm[] byteCodeArray = new ByteCodeForm[256];
+ protected static final Map byteCodesByName = new HashMap(256);
static {
- final ByteCodeForm[] byteCodeArray = new ByteCodeForm[256];
byteCodeArray[0] = new NoArgumentForm(0, "nop");
byteCodeArray[1] = new NoArgumentForm(1, "aconst_null");
byteCodeArray[2] = new NoArgumentForm(2, "iconst_m1");
@@ -391,8 +391,7 @@
for (int i = 0; i < byteCodeArray.length; i++) {
final ByteCodeForm byteCode = byteCodeArray[i];
if (byteCode != null) {
- byteCodes.put(new Integer(i), byteCode);
- byteCodes.put(byteCode.getName(), byteCode);
+ byteCodesByName.put(byteCode.getName(), byteCode);
}
}
}
@@ -478,11 +477,11 @@
}
public static ByteCodeForm get(int opcode) {
- return (ByteCodeForm) byteCodes.get(new Integer(opcode));
+ return (ByteCodeForm) byteCodeArray[opcode];
}
public static ByteCodeForm get(String name) {
- return (ByteCodeForm) byteCodes.get(name);
+ return (ByteCodeForm) byteCodesByName.get(name);
}
public String toString() {