src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/SymbolTable.java
branchhttp-client-branch
changeset 56833 be0819373531
parent 56819 4cd8d88dab38
parent 51093 4db6e8715e35
child 56834 577317b61442
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/SymbolTable.java	Tue Jul 03 14:12:49 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-package sun.jvm.hotspot.memory;
-
-import java.io.*;
-import java.util.*;
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.oops.*;
-import sun.jvm.hotspot.types.*;
-import sun.jvm.hotspot.runtime.*;
-import sun.jvm.hotspot.utilities.*;
-
-public class SymbolTable extends sun.jvm.hotspot.utilities.Hashtable {
-  static {
-    VM.registerVMInitializedObserver(new Observer() {
-        public void update(Observable o, Object data) {
-          initialize(VM.getVM().getTypeDataBase());
-        }
-      });
-  }
-
-  private static synchronized void initialize(TypeDataBase db) {
-    Type type = db.lookupType("SymbolTable");
-    theTableField  = type.getAddressField("_the_table");
-    sharedTableField = type.getAddressField("_shared_table");
-    type = db.lookupType("RehashableSymbolHashtable");
-    seedField = type.getCIntegerField("_seed");
-  }
-
-  // Fields
-  private static AddressField theTableField;
-  private static AddressField sharedTableField;
-  private static CIntegerField seedField;
-
-  private CompactHashTable sharedTable;
-
-  // Accessors
-  public static SymbolTable getTheTable() {
-    Address tmp = theTableField.getValue();
-    SymbolTable table = (SymbolTable) VMObjectFactory.newObject(SymbolTable.class, tmp);
-    Address shared = sharedTableField.getStaticFieldAddress();
-    table.sharedTable = (CompactHashTable)VMObjectFactory.newObject(CompactHashTable.class, shared);
-    return table;
-  }
-
-  public CompactHashTable getSharedTable() {
-      return sharedTable;
-  }
-
-  public static long getSeed() {
-      return (long) seedField.getValue();
-  }
-
-  public static boolean useAlternateHashcode() {
-      if (getSeed() != 0) {
-          return true;
-      }
-      return false;
-  }
-
-  public SymbolTable(Address addr) {
-    super(addr);
-  }
-
-  /** Clone of VM's "temporary" probe routine, as the SA currently
-      does not support mutation so lookup() would have no effect
-      anyway. Returns null if the given string is not in the symbol
-      table. */
-  public Symbol probe(String name) {
-    try {
-      return probe(toModifiedUTF8Bytes(name));
-    } catch (IOException e) {
-      return null;
-    }
-  }
-
-  /** Clone of VM's "temporary" probe routine, as the SA currently
-      does not support mutation so lookup() would have no effect
-      anyway. Searches the regular symbol table and the shared symbol
-      table. Null is returned if the given name is not found in both
-      tables. */
-  public Symbol probe(byte[] name) {
-    long hashValue = hashSymbol(name);
-
-    // shared table does not use alternate hashing algorithm,
-    // it always uses the same original hash code.
-    Symbol s = sharedTable.probe(name, hashValue);
-    if (s != null) {
-      return s;
-    }
-
-    if (useAlternateHashcode()) {
-        hashValue = AltHashing.murmur3_32(getSeed(), name);
-    }
-
-    for (HashtableEntry e = (HashtableEntry) bucket(hashToIndex(hashValue)); e != null; e = (HashtableEntry) e.next()) {
-      if (e.hash() == hashValue) {
-         Symbol sym = Symbol.create(e.literalValue());
-         if (sym.equals(name)) {
-           return sym;
-         }
-      }
-    }
-
-    return null;
-  }
-
-  public interface SymbolVisitor {
-    public void visit(Symbol sym);
-  }
-
-  public void symbolsDo(SymbolVisitor visitor) {
-    int numBuckets = tableSize();
-    for (int i = 0; i < numBuckets; i++) {
-      for (HashtableEntry e = (HashtableEntry) bucket(i); e != null;
-           e = (HashtableEntry) e.next()) {
-        visitor.visit(Symbol.create(e.literalValue()));
-      }
-    }
-  }
-
-  private static byte[] toModifiedUTF8Bytes(String name) throws IOException {
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    DataOutputStream dos = new DataOutputStream(baos);
-    dos.writeUTF(name);
-    dos.flush();
-    byte[] buf = baos.toByteArray();
-    byte[] res = new byte[buf.length - 2];
-    // skip the length part
-    System.arraycopy(buf, 2, res, 0, res.length);
-    return res;
-  }
-}