8269962: SA has unused Hashtable, Dictionary classes

Reviewed-by: cjplummer, iklam, dholmes
This commit is contained in:
Coleen Phillimore 2021-07-08 14:28:32 +00:00
parent 4a45d95719
commit bca570c56e
14 changed files with 3 additions and 669 deletions

View file

@ -166,11 +166,6 @@
#define JVMTI_STRUCTS(static_field) #define JVMTI_STRUCTS(static_field)
#endif // INCLUDE_JVMTI #endif // INCLUDE_JVMTI
typedef HashtableEntry<intptr_t, mtInternal> IntptrHashtableEntry;
typedef Hashtable<intptr_t, mtInternal> IntptrHashtable;
typedef Hashtable<InstanceKlass*, mtClass> KlassHashtable;
typedef HashtableEntry<InstanceKlass*, mtClass> KlassHashtableEntry;
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
// VM_STRUCTS // VM_STRUCTS
// //
@ -470,34 +465,12 @@ typedef HashtableEntry<InstanceKlass*, mtClass> KlassHashtableEntry;
static_field(Symbol, _vm_symbols[0], Symbol*) \ static_field(Symbol, _vm_symbols[0], Symbol*) \
\ \
/*******************/ \ /*******************/ \
/* HashtableBucket */ \
/*******************/ \
\
nonstatic_field(HashtableBucket<mtInternal>, _entry, BasicHashtableEntry<mtInternal>*) \
\
/******************/ \
/* HashtableEntry */ \
/******************/ \
\
nonstatic_field(BasicHashtableEntry<mtInternal>, _next, BasicHashtableEntry<mtInternal>*) \
nonstatic_field(BasicHashtableEntry<mtInternal>, _hash, unsigned int) \
nonstatic_field(IntptrHashtableEntry, _literal, intptr_t) \
\
/*************/ \
/* Hashtable */ \
/*************/ \
\
nonstatic_field(BasicHashtable<mtInternal>, _table_size, int) \
nonstatic_field(BasicHashtable<mtInternal>, _buckets, HashtableBucket<mtInternal>*) \
\
/*******************/ \
/* ClassLoaderData */ \ /* ClassLoaderData */ \
/*******************/ \ /*******************/ \
nonstatic_field(ClassLoaderData, _class_loader, OopHandle) \ nonstatic_field(ClassLoaderData, _class_loader, OopHandle) \
nonstatic_field(ClassLoaderData, _next, ClassLoaderData*) \ nonstatic_field(ClassLoaderData, _next, ClassLoaderData*) \
volatile_nonstatic_field(ClassLoaderData, _klasses, Klass*) \ volatile_nonstatic_field(ClassLoaderData, _klasses, Klass*) \
nonstatic_field(ClassLoaderData, _has_class_mirror_holder, bool) \ nonstatic_field(ClassLoaderData, _has_class_mirror_holder, bool) \
volatile_nonstatic_field(ClassLoaderData, _dictionary, Dictionary*) \
\ \
static_ptr_volatile_field(ClassLoaderDataGraph, _head, ClassLoaderData*) \ static_ptr_volatile_field(ClassLoaderDataGraph, _head, ClassLoaderData*) \
\ \
@ -1309,14 +1282,6 @@ typedef HashtableEntry<InstanceKlass*, mtClass> KlassHashtableEntry;
/* SystemDictionary */ \ /* SystemDictionary */ \
/********************/ \ /********************/ \
\ \
declare_toplevel_type(BasicHashtable<mtInternal>) \
declare_type(IntptrHashtable, BasicHashtable<mtInternal>) \
declare_toplevel_type(BasicHashtable<mtSymbol>) \
declare_type(Dictionary, KlassHashtable) \
declare_toplevel_type(BasicHashtableEntry<mtInternal>) \
declare_type(IntptrHashtableEntry, BasicHashtableEntry<mtInternal>) \
declare_type(DictionaryEntry, KlassHashtableEntry) \
declare_toplevel_type(HashtableBucket<mtInternal>) \
declare_toplevel_type(SystemDictionary) \ declare_toplevel_type(SystemDictionary) \
declare_toplevel_type(vmClasses) \ declare_toplevel_type(vmClasses) \
declare_toplevel_type(vmSymbols) \ declare_toplevel_type(vmSymbols) \

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -47,24 +47,17 @@ public class ClassLoaderData extends VMObject {
nextField = type.getAddressField("_next"); nextField = type.getAddressField("_next");
klassesField = new MetadataField(type.getAddressField("_klasses"), 0); klassesField = new MetadataField(type.getAddressField("_klasses"), 0);
hasClassMirrorHolderField = new CIntField(type.getCIntegerField("_has_class_mirror_holder"), 0); hasClassMirrorHolderField = new CIntField(type.getCIntegerField("_has_class_mirror_holder"), 0);
dictionaryField = type.getAddressField("_dictionary");
} }
private static long classLoaderFieldOffset; private static long classLoaderFieldOffset;
private static AddressField nextField; private static AddressField nextField;
private static MetadataField klassesField; private static MetadataField klassesField;
private static CIntField hasClassMirrorHolderField; private static CIntField hasClassMirrorHolderField;
private static AddressField dictionaryField;
public ClassLoaderData(Address addr) { public ClassLoaderData(Address addr) {
super(addr); super(addr);
} }
public Dictionary dictionary() {
Address tmp = dictionaryField.getValue();
return (Dictionary) VMObjectFactory.newObject(Dictionary.class, tmp);
}
public static ClassLoaderData instantiateWrapperFor(Address addr) { public static ClassLoaderData instantiateWrapperFor(Address addr) {
if (addr == null) { if (addr == null) {
return null; return null;
@ -114,9 +107,4 @@ public class ClassLoaderData extends VMObject {
v.visit(l); v.visit(l);
} }
} }
/** Iterate over all klasses in the dictionary, including initiating loader. */
public void allEntriesDo(ClassLoaderDataGraph.ClassAndLoaderVisitor v) {
dictionary().allEntriesDo(v, getClassLoader());
}
} }

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -84,12 +84,4 @@ public class ClassLoaderDataGraph {
cld.classesDo(v); cld.classesDo(v);
} }
} }
/** Iterate over all klasses - including object, primitive
array klasses, pass initiating loader. */
public void allEntriesDo(ClassAndLoaderVisitor v) {
for (ClassLoaderData cld = getClassLoaderGraphHead(); cld != null; cld = cld.next()) {
cld.allEntriesDo(v);
}
}
} }

View file

@ -1,61 +0,0 @@
/*
* @(#)BinaryTreeDictionary.java
* Copyright (c) 2000, 2020, 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.util.*;
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.types.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.utilities.Observable;
import sun.jvm.hotspot.utilities.Observer;
public class AFLBinaryTreeDictionary extends VMObject {
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("AFLBinaryTreeDictionary");
totalSizeField = type.getCIntegerField("_total_size");
}
// Fields
private static CIntegerField totalSizeField;
// Accessors
public long size() {
return totalSizeField.getValue(addr);
}
// Constructor
public AFLBinaryTreeDictionary(Address addr) {
super(addr);
}
}

View file

@ -1,102 +0,0 @@
/*
* Copyright (c) 2003, 2020, 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.util.*;
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.classfile.*;
import sun.jvm.hotspot.oops.*;
import sun.jvm.hotspot.types.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.utilities.*;
import sun.jvm.hotspot.utilities.Observable;
import sun.jvm.hotspot.utilities.Observer;
public class Dictionary 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) {
// just checking that the type exists
Type type = db.lookupType("Dictionary");
}
public Dictionary(Address addr) {
super(addr);
}
// this is overriden here so that Hashtable.bucket will return
// object of DictionaryEntry.class
protected Class<? extends HashtableEntry> getHashtableEntryClass() {
return DictionaryEntry.class;
}
/** All classes, and their initiating class loader, passed in. */
public void allEntriesDo(ClassLoaderDataGraph.ClassAndLoaderVisitor v, Oop loader) {
int tblSize = tableSize();
for (int index = 0; index < tblSize; index++) {
for (DictionaryEntry probe = (DictionaryEntry) bucket(index); probe != null;
probe = (DictionaryEntry) probe.next()) {
Klass k = probe.klass();
// Only visit InstanceKlasses that are at least in the "loaded" init_state. Otherwise
// the InstanceKlass won't have some required fields initialized, which can cause problems.
if (k instanceof InstanceKlass && !((InstanceKlass)k).isLoaded()) {
continue;
}
v.visit(k, loader);
}
}
}
// - Internals only below this point
private DictionaryEntry getEntry(int index, long hash, Symbol className) {
for (DictionaryEntry entry = (DictionaryEntry) bucket(index); entry != null;
entry = (DictionaryEntry) entry.next()) {
if (entry.hash() == hash && entry.equals(className)) {
return entry;
}
}
return null;
}
public boolean contains(Klass c) {
long hash = computeHash(c.getName());
int index = hashToIndex(hash);
for (DictionaryEntry entry = (DictionaryEntry) bucket(index); entry != null;
entry = (DictionaryEntry) entry.next()) {
if (entry.literalValue().equals(c.getAddress())) {
return true;
}
}
return false;
}
}

View file

@ -1,69 +0,0 @@
/*
* Copyright (c) 2003, 2020, 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.util.*;
import sun.jvm.hotspot.classfile.ClassLoaderData;
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.*;
import sun.jvm.hotspot.utilities.Observable;
import sun.jvm.hotspot.utilities.Observer;
public class DictionaryEntry extends sun.jvm.hotspot.utilities.HashtableEntry {
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("DictionaryEntry");
}
public Klass klass() {
return (Klass)Metadata.instantiateWrapperFor(literalValue());
}
public DictionaryEntry(Address addr) {
super(addr);
}
public boolean equals(Symbol className) {
InstanceKlass ik = (InstanceKlass) klass();
return ik.getName().equals(className);
}
/* covariant return type :-(
public DictionaryEntry next() {
return (DictionaryEntry) super.next();
}
For now, let the caller cast it ..
*/
}

View file

@ -29,7 +29,6 @@ import java.util.*;
import sun.jvm.hotspot.classfile.ClassLoaderData; import sun.jvm.hotspot.classfile.ClassLoaderData;
import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.memory.*;
import sun.jvm.hotspot.memory.Dictionary;
import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.types.*;
import sun.jvm.hotspot.utilities.*; import sun.jvm.hotspot.utilities.*;

View file

@ -81,19 +81,6 @@ public class Symbol extends VMObject {
return addr.getJByteAt(baseOffset + index); return addr.getJByteAt(baseOffset + index);
} }
public long identityHash() {
long addr_value = getAddress().asLongValue();
long addr_bits =
(addr_value >> (VM.getVM().getLogBytesPerWord() + 3)) & 0xffffffffL;
int length = (int)getLength();
int byte0 = getByteAt(0);
int byte1 = getByteAt(1);
long id_hash = (long)idHashAndRefcount.getValue(this.addr);
id_hash = (id_hash >> 16) & 0xffff;
return (id_hash |
((addr_bits ^ (length << 8) ^ ((byte0 << 8) | byte1)) << 16)) & 0xffffffffL;
}
public boolean equals(byte[] modUTF8Chars) { public boolean equals(byte[] modUTF8Chars) {
int l = (int) getLength(); int l = (int) getLength();
if (l != modUTF8Chars.length) return false; if (l != modUTF8Chars.length) return false;

View file

@ -1,81 +0,0 @@
/*
* Copyright (c) 2003, 2020, 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.utilities;
import java.util.*;
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.types.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.utilities.Observable;
import sun.jvm.hotspot.utilities.Observer;
// Superclass for symbol and string tables.
public class BasicHashtable extends VMObject {
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("BasicHashtable<mtInternal>");
tableSizeField = type.getCIntegerField("_table_size");
bucketsField = type.getAddressField("_buckets");
bucketSize = db.lookupType("HashtableBucket<mtInternal>").getSize();
}
// Fields
private static CIntegerField tableSizeField;
private static AddressField bucketsField;
private static long bucketSize;
// Accessors
protected int tableSize() {
return (int) tableSizeField.getValue(addr);
}
protected BasicHashtableEntry bucket(int i) {
if (Assert.ASSERTS_ENABLED) {
Assert.that(i >= 0 && i < tableSize(), "Invalid bucket id");
}
Address tmp = bucketsField.getValue(addr);
tmp = tmp.addOffsetTo(i * bucketSize);
HashtableBucket bucket = VMObjectFactory.newObject(
HashtableBucket.class, tmp);
return bucket.getEntry(getHashtableEntryClass());
}
// derived class may return Class<? extends BasicHashtableEntry>
protected Class<? extends BasicHashtableEntry> getHashtableEntryClass() {
return BasicHashtableEntry.class;
}
public BasicHashtable(Address addr) {
super(addr);
}
}

View file

@ -1,82 +0,0 @@
/*
* Copyright (c) 2003, 2020, 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.utilities;
import java.util.*;
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.oops.Oop;
import sun.jvm.hotspot.oops.ObjectHeap;
import sun.jvm.hotspot.types.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.utilities.Observable;
import sun.jvm.hotspot.utilities.Observer;
public class BasicHashtableEntry extends VMObject {
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("BasicHashtableEntry<mtInternal>");
hashField = type.getCIntegerField("_hash");
nextField = type.getAddressField("_next");
}
// Fields
private static CIntegerField hashField;
private static AddressField nextField;
// Accessors
public long hash() {
return hashField.getValue(addr) & 0xFFFFFFFFL;
}
private long nextAddressValue() {
Debugger dbg = VM.getVM().getDebugger();
Address nextValue = nextField.getValue(addr);
return (nextValue != null) ? dbg.getAddressValue(nextValue) : 0L;
}
public boolean isShared() {
return (nextAddressValue() & 1L) != 0;
}
public BasicHashtableEntry next() {
Address nextValue = nextField.getValue(addr);
Address next = (nextValue != null)? nextValue.andWithMask(-2L) : null;
// using this.getClass so that return type will be as expected in
// subclass context. But, because we can't use covariant return type
// caller has to use this next and cast the result to correct type.
return (BasicHashtableEntry) VMObjectFactory.newObject(this.getClass(), next);
}
public BasicHashtableEntry(Address addr) {
super(addr);
}
}

View file

@ -1,76 +0,0 @@
/*
* Copyright (c) 2003, 2020, 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.utilities;
import java.util.*;
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.types.*;
import sun.jvm.hotspot.oops.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.utilities.Observable;
import sun.jvm.hotspot.utilities.Observer;
public class Hashtable extends BasicHashtable {
static {
VM.registerVMInitializedObserver(new Observer() {
public void update(Observable o, Object data) {
initialize(VM.getVM().getTypeDataBase());
}
});
}
private static synchronized void initialize(TypeDataBase db) {
// just to confirm that type exists
Type type = db.lookupType("IntptrHashtable");
}
protected Class<? extends HashtableEntry> getHashtableEntryClass() {
return HashtableEntry.class;
}
public long computeHash(Symbol name) {
return name.identityHash();
}
public int hashToIndex(long fullHash) {
return (int) (fullHash % tableSize());
}
public Hashtable(Address addr) {
super(addr);
}
// VM's Hashtable::hash_symbol
protected static long hashSymbol(byte[] buf) {
long h = 0;
int s = 0;
int len = buf.length;
while (len-- > 0) {
h = 31*h + (0xFFL & buf[s]);
s++;
}
return h & 0xFFFFFFFFL;
}
}

View file

@ -1,64 +0,0 @@
/*
* Copyright (c) 2003, 2020, 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.utilities;
import java.util.*;
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.types.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.utilities.Observable;
import sun.jvm.hotspot.utilities.Observer;
public class HashtableBucket extends VMObject {
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("HashtableBucket<mtInternal>");
entryField = type.getAddressField("_entry");
}
// Field
private static AddressField entryField;
// Accessor
public BasicHashtableEntry getEntry(Class<? extends BasicHashtableEntry> clazz) {
Address tmp = entryField.getValue(addr);
return VMObjectFactory.newObject(clazz, tmp);
}
public BasicHashtableEntry entry() {
return getEntry(HashtableEntry.class);
}
public HashtableBucket(Address addr) {
super(addr);
}
}

View file

@ -1,61 +0,0 @@
/*
* Copyright (c) 2003, 2020, 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.utilities;
import java.util.*;
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.oops.Oop;
import sun.jvm.hotspot.oops.ObjectHeap;
import sun.jvm.hotspot.types.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.utilities.Observable;
import sun.jvm.hotspot.utilities.Observer;
public class HashtableEntry extends BasicHashtableEntry {
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("IntptrHashtableEntry");
literalField = type.getAddressField("_literal");
}
// Fields
private static AddressField literalField;
// Accessors
public Address literalValue() {
return literalField.getValue(addr);
}
public HashtableEntry(Address addr) {
super(addr);
}
}

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -56,7 +56,6 @@ public class ClhsdbVmStructsDump {
"field InstanceKlass _constants ConstantPool*", "field InstanceKlass _constants ConstantPool*",
"field Klass _name Symbol*", "field Klass _name Symbol*",
"type ClassLoaderData* null", "type ClassLoaderData* null",
"type DictionaryEntry KlassHashtableEntry",
"field JavaThread _osthread OSThread*", "field JavaThread _osthread OSThread*",
"type TenuredGeneration CardGeneration", "type TenuredGeneration CardGeneration",
"field JVMState _bci", "field JVMState _bci",