< prev index next >
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/Symbol.java
Print this page
@ rev 51710 : 8204308: SA: serviceability/sa/TestInstanceKlassSize*.java fails when running in CDS mode
| Summary: Use longs instead of ints while computing the identity hash of klass symbols
~ Reviewed-by: coleenp, lfoltan
o rev 50929 : 8205534: Remove SymbolTable dependency from serviceability agent
| Reviewed-by: gziemski, poonam, jgeorge, hseigel
~
*** 81,99 ****
return addr.getJByteAt(baseOffset + index);
}
// _identity_hash is a short
private static CIntegerField idHash;
! public int identityHash() {
long addr_value = getAddress().asLongValue();
! int addr_bits = (int)(addr_value >> (VM.getVM().getLogMinObjAlignmentInBytes() + 3));
int length = (int)getLength();
int byte0 = getByteAt(0);
int byte1 = getByteAt(1);
! int id_hash = (int)(0xffff & idHash.getValue(this.addr));
! return id_hash |
! ((addr_bits ^ (length << 8) ^ ((byte0 << 8) | byte1)) << 16);
}
public boolean equals(byte[] modUTF8Chars) {
int l = (int) getLength();
if (l != modUTF8Chars.length) return false;
--- 81,100 ----
return addr.getJByteAt(baseOffset + index);
}
// _identity_hash is a short
private static CIntegerField idHash;
! public long identityHash() {
long addr_value = getAddress().asLongValue();
! long addr_bits =
! (addr_value >> (VM.getVM().getLogMinObjAlignmentInBytes() + 3)) & 0xffffffffL;
int length = (int)getLength();
int byte0 = getByteAt(0);
int byte1 = getByteAt(1);
! long id_hash = 0xffffL & (long)idHash.getValue(this.addr);
! return (id_hash |
! ((addr_bits ^ (length << 8) ^ ((byte0 << 8) | byte1)) << 16)) & 0xffffffffL;
}
public boolean equals(byte[] modUTF8Chars) {
int l = (int) getLength();
if (l != modUTF8Chars.length) return false;
< prev index next >