agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java
Print this page
rev 3688 : 7054512: Compress class pointers after perm gen removal
Summary: support of compress class pointers in the compilers.
Reviewed-by:
@@ -101,10 +101,11 @@
private int objectAlignmentInBytes;
private int minObjAlignmentInBytes;
private int logMinObjAlignmentInBytes;
private int heapWordSize;
private int heapOopSize;
+ private int klassPtrSize;
private int oopSize;
/** This is only present in a non-core build */
private CodeCache codeCache;
/** This is only present in a C1 build */
private Runtime1 runtime1;
@@ -127,11 +128,11 @@
private static Type intxType;
private static Type uintxType;
private static CIntegerType boolType;
private Boolean sharingEnabled;
private Boolean compressedOopsEnabled;
- private Boolean compressedHeadersEnabled;
+ private Boolean compressedKlassPointersEnabled;
// command line flags supplied to VM - see struct Flag in globals.hpp
public static final class Flag {
private String type;
private String name;
@@ -348,10 +349,16 @@
// Size info for oops within java objects is fixed
heapOopSize = (int)getIntSize();
} else {
heapOopSize = (int)getOopSize();
}
+
+ if (isCompressedKlassPointersEnabled()) {
+ klassPtrSize = (int)getIntSize();
+ } else {
+ klassPtrSize = (int)getOopSize(); // same as an oop
+ }
}
/** This could be used by a reflective runtime system */
public static void initialize(TypeDataBase db, boolean isBigEndian) {
if (soleInstance != null) {
@@ -372,12 +379,13 @@
for (Iterator iter = vmInitializedObservers.iterator(); iter.hasNext(); ) {
((Observer) iter.next()).update(null, null);
}
- debugger.putHeapConst(soleInstance.getHeapOopSize(), Universe.getNarrowOopBase(),
- Universe.getNarrowOopShift());
+ debugger.putHeapConst(soleInstance.getHeapOopSize(), soleInstance.getKlassPtrSize(),
+ Universe.getNarrowOopBase(), Universe.getNarrowOopShift(),
+ Universe.getNarrowKlassBase(), Universe.getNarrowKlassShift());
}
/** This is used by the debugging system */
public static void shutdown() {
soleInstance = null;
@@ -534,10 +542,14 @@
}
public int getHeapOopSize() {
return heapOopSize;
}
+
+ public int getKlassPtrSize() {
+ return klassPtrSize;
+ }
/** Utility routine for getting data structure alignment correct */
public long alignUp(long size, long alignment) {
return (size + alignment - 1) & ~(alignment - 1);
}
@@ -782,17 +794,17 @@
(flag.getBool()? Boolean.TRUE: Boolean.FALSE);
}
return compressedOopsEnabled.booleanValue();
}
- public boolean isCompressedHeadersEnabled() {
- if (compressedHeadersEnabled == null) {
- Flag flag = getCommandLineFlag("UseCompressedHeaders");
- compressedHeadersEnabled = (flag == null) ? Boolean.FALSE:
+ public boolean isCompressedKlassPointersEnabled() {
+ if (compressedKlassPointersEnabled == null) {
+ Flag flag = getCommandLineFlag("UseCompressedKlassPointers");
+ compressedKlassPointersEnabled = (flag == null) ? Boolean.FALSE:
(flag.getBool()? Boolean.TRUE: Boolean.FALSE);
}
- return compressedHeadersEnabled.booleanValue();
+ return compressedKlassPointersEnabled.booleanValue();
}
public int getObjectAlignmentInBytes() {
if (objectAlignmentInBytes == 0) {
Flag flag = getCommandLineFlag("ObjectAlignmentInBytes");