diff --git a/jol-cli/src/main/java/org/openjdk/jol/OptionFormatter.java b/jol-cli/src/main/java/org/openjdk/jol/OptionFormatter.java index 5c013660..f51d4ab5 100644 --- a/jol-cli/src/main/java/org/openjdk/jol/OptionFormatter.java +++ b/jol-cli/src/main/java/org/openjdk/jol/OptionFormatter.java @@ -39,6 +39,7 @@ public OptionFormatter(String label) { this.label = label; } + @Override public String format(Map options) { StringBuilder sb = new StringBuilder(); sb.append("Usage: java -jar ... " + label + " [options] "); diff --git a/jol-core/src/main/java/org/openjdk/jol/datamodel/Model32.java b/jol-core/src/main/java/org/openjdk/jol/datamodel/Model32.java index 3f030a54..50c25732 100644 --- a/jol-core/src/main/java/org/openjdk/jol/datamodel/Model32.java +++ b/jol-core/src/main/java/org/openjdk/jol/datamodel/Model32.java @@ -70,15 +70,22 @@ public int arrayHeaderSize() { @Override public int sizeOf(String klass) { - if (klass.equals("byte")) return 1; - if (klass.equals("boolean")) return 1; - if (klass.equals("short")) return 2; - if (klass.equals("char")) return 2; - if (klass.equals("int")) return 4; - if (klass.equals("float")) return 4; - if (klass.equals("long")) return 8; - if (klass.equals("double")) return 8; - return 4; + switch (klass) { + case "byte": + case "boolean": + return 1; + case "short": + case "char": + return 2; + case "int": + case "float": + return 4; + case "long": + case "double": + return 8; + default: + return 4; + } } @Override @@ -93,8 +100,12 @@ public String toString() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Model32 model32 = (Model32) o; return align == model32.align; } diff --git a/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64.java b/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64.java index 7e26f086..772a9a7b 100644 --- a/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64.java +++ b/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64.java @@ -70,15 +70,22 @@ public int arrayHeaderSize() { @Override public int sizeOf(String klass) { - if (klass.equals("byte")) return 1; - if (klass.equals("boolean")) return 1; - if (klass.equals("short")) return 2; - if (klass.equals("char")) return 2; - if (klass.equals("int")) return 4; - if (klass.equals("float")) return 4; - if (klass.equals("long")) return 8; - if (klass.equals("double")) return 8; - return 8; + switch (klass) { + case "byte": + case "boolean": + return 1; + case "short": + case "char": + return 2; + case "int": + case "float": + return 4; + case "long": + case "double": + return 8; + default: + return 8; + } } @Override @@ -93,8 +100,12 @@ public String toString() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Model64 model64 = (Model64) o; return align == model64.align; } diff --git a/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64_CCPS.java b/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64_CCPS.java index ba162d3c..a6867125 100644 --- a/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64_CCPS.java +++ b/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64_CCPS.java @@ -68,15 +68,22 @@ public int arrayHeaderSize() { @Override public int sizeOf(String klass) { - if (klass.equals("byte")) return 1; - if (klass.equals("boolean")) return 1; - if (klass.equals("short")) return 2; - if (klass.equals("char")) return 2; - if (klass.equals("int")) return 4; - if (klass.equals("float")) return 4; - if (klass.equals("long")) return 8; - if (klass.equals("double")) return 8; - return 8; + switch (klass) { + case "byte": + case "boolean": + return 1; + case "short": + case "char": + return 2; + case "int": + case "float": + return 4; + case "long": + case "double": + return 8; + default: + return 8; + } } @Override diff --git a/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64_COOPS_CCPS.java b/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64_COOPS_CCPS.java index b14823dc..74980eac 100644 --- a/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64_COOPS_CCPS.java +++ b/jol-core/src/main/java/org/openjdk/jol/datamodel/Model64_COOPS_CCPS.java @@ -69,15 +69,22 @@ public int arrayHeaderSize() { @Override public int sizeOf(String klass) { - if (klass.equals("byte")) return 1; - if (klass.equals("boolean")) return 1; - if (klass.equals("short")) return 2; - if (klass.equals("char")) return 2; - if (klass.equals("int")) return 4; - if (klass.equals("float")) return 4; - if (klass.equals("long")) return 8; - if (klass.equals("double")) return 8; - return 4; + switch (klass) { + case "byte": + case "boolean": + return 1; + case "short": + case "char": + return 2; + case "int": + case "float": + return 4; + case "long": + case "double": + return 8; + default: + return 4; + } } @Override @@ -92,8 +99,12 @@ public String toString() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Model64_COOPS_CCPS that = (Model64_COOPS_CCPS) o; return align == that.align; } diff --git a/jol-core/src/main/java/org/openjdk/jol/datamodel/ModelVM.java b/jol-core/src/main/java/org/openjdk/jol/datamodel/ModelVM.java index 3ac31013..5eaf4090 100644 --- a/jol-core/src/main/java/org/openjdk/jol/datamodel/ModelVM.java +++ b/jol-core/src/main/java/org/openjdk/jol/datamodel/ModelVM.java @@ -75,8 +75,12 @@ public String toString() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } return true; } diff --git a/jol-core/src/main/java/org/openjdk/jol/heap/HeapDumpReader.java b/jol-core/src/main/java/org/openjdk/jol/heap/HeapDumpReader.java index 6c23ff73..6fc8a7a0 100644 --- a/jol-core/src/main/java/org/openjdk/jol/heap/HeapDumpReader.java +++ b/jol-core/src/main/java/org/openjdk/jol/heap/HeapDumpReader.java @@ -317,10 +317,12 @@ private void digestClass() throws HeapDumpException { private long readValue(int type) throws HeapDumpException { switch (type) { case 2: // object - if (idSize == 4) + if (idSize == 4) { return read_U4(); - if (idSize == 8) + } + if (idSize == 8) { return read_U8(); + } throw new HeapDumpException("Illegal ID size"); case 4: // boolean @@ -345,10 +347,12 @@ private long readValue(int type) throws HeapDumpException { private int getSize(int type) throws HeapDumpException { switch (type) { case 2: // object - if (idSize == 4) + if (idSize == 4) { return 4; - if (idSize == 8) + } + if (idSize == 8) { return 8; + } throw new HeapDumpException("Illegal ID size"); case 4: // boolean case 8: // byte @@ -398,10 +402,12 @@ private String getTypeString(int type) throws HeapDumpException { private long read_ID() throws HeapDumpException { int read = read(buf, idSize); - if (read == 4) + if (read == 4) { return ((long)wrapBuf.getInt(0) & 0xFFFFFFFFL); - if (read == 8) + } + if (read == 8) { return wrapBuf.getLong(0); + } throw new HeapDumpException("Unable to read " + idSize + " bytes"); } @@ -433,7 +439,9 @@ String readNullTerminated() throws HeapDumpException { int r; StringBuilder sb = new StringBuilder(); while ((r = read()) != -1) { - if (r == 0) break; + if (r == 0) { + break; + } sb.append((char) (r & 0xFF)); } return sb.toString(); @@ -443,7 +451,9 @@ String readString(long len) throws HeapDumpException { StringBuilder sb = new StringBuilder(); for (long l = 0; l < len; l++) { int r = read(); - if (r == -1) break; + if (r == -1) { + break; + } sb.append((char) (r & 0xFF)); } return sb.toString(); diff --git a/jol-core/src/main/java/org/openjdk/jol/info/AbstractGraphWalker.java b/jol-core/src/main/java/org/openjdk/jol/info/AbstractGraphWalker.java index ab21d7a8..71d24c79 100644 --- a/jol-core/src/main/java/org/openjdk/jol/info/AbstractGraphWalker.java +++ b/jol-core/src/main/java/org/openjdk/jol/info/AbstractGraphWalker.java @@ -54,8 +54,12 @@ protected Field[] computeValue(Class klass) { List results = new ArrayList<>(); for (Field f : klass.getDeclaredFields()) { - if (Modifier.isStatic(f.getModifiers())) continue; - if (f.getType().isPrimitive()) continue; + if (Modifier.isStatic(f.getModifiers())) { + continue; + } + if (f.getType().isPrimitive()) { + continue; + } results.add(f); } diff --git a/jol-core/src/main/java/org/openjdk/jol/info/ClassData.java b/jol-core/src/main/java/org/openjdk/jol/info/ClassData.java index ea4c0117..acab18f8 100644 --- a/jol-core/src/main/java/org/openjdk/jol/info/ClassData.java +++ b/jol-core/src/main/java/org/openjdk/jol/info/ClassData.java @@ -63,27 +63,37 @@ public static ClassData parseClass(Class klass) { } private static int arrayLength(Object o) { - if (o == null) + if (o == null) { return 0; + } Class k = o.getClass(); - if (!k.isArray()) + if (!k.isArray()) { throw new IllegalArgumentException(k.getName() + " is not an array class"); - if (k == byte[].class) + } + if (k == byte[].class) { return ((byte[]) o).length; - if (k == boolean[].class) + } + if (k == boolean[].class) { return ((boolean[]) o).length; - if (k == short[].class) + } + if (k == short[].class) { return ((short[]) o).length; - if (k == char[].class) + } + if (k == char[].class) { return ((char[]) o).length; - if (k == int[].class) + } + if (k == int[].class) { return ((int[]) o).length; - if (k == float[].class) + } + if (k == float[].class) { return ((float[]) o).length; - if (k == double[].class) + } + if (k == double[].class) { return ((double[]) o).length; - if (k == long[].class) + } + if (k == long[].class) { return ((long[]) o).length; + } return ((Object[])o).length; } @@ -373,18 +383,33 @@ public void merge(ClassData superClassData) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } ClassData classData = (ClassData) o; - if (isArray != classData.isArray) return false; - if (length != classData.length) return false; - if (arrayComponentKlass != null ? !arrayComponentKlass.equals(classData.arrayComponentKlass) : classData.arrayComponentKlass != null) + if (isArray != classData.isArray) { + return false; + } + if (length != classData.length) { + return false; + } + if (arrayComponentKlass != null ? !arrayComponentKlass.equals(classData.arrayComponentKlass) : classData.arrayComponentKlass != null) { + return false; + } + if (arrayKlass != null ? !arrayKlass.equals(classData.arrayKlass) : classData.arrayKlass != null) { + return false; + } + if (classNames != null ? !classNames.equals(classData.classNames) : classData.classNames != null) { return false; - if (arrayKlass != null ? !arrayKlass.equals(classData.arrayKlass) : classData.arrayKlass != null) return false; - if (classNames != null ? !classNames.equals(classData.classNames) : classData.classNames != null) return false; - if (fields != null ? !fields.equals(classData.fields) : classData.fields != null) return false; + } + if (fields != null ? !fields.equals(classData.fields) : classData.fields != null) { + return false; + } return true; } diff --git a/jol-core/src/main/java/org/openjdk/jol/info/ClassLayout.java b/jol-core/src/main/java/org/openjdk/jol/info/ClassLayout.java index 9230fe2f..370f504d 100644 --- a/jol-core/src/main/java/org/openjdk/jol/info/ClassLayout.java +++ b/jol-core/src/main/java/org/openjdk/jol/info/ClassLayout.java @@ -465,8 +465,12 @@ private static String parseMarkWord(long mark) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } ClassLayout that = (ClassLayout) o; return fields.equals(that.fields) && model.equals(that.model); diff --git a/jol-core/src/main/java/org/openjdk/jol/info/FieldData.java b/jol-core/src/main/java/org/openjdk/jol/info/FieldData.java index e5e77730..6227d2e1 100644 --- a/jol-core/src/main/java/org/openjdk/jol/info/FieldData.java +++ b/jol-core/src/main/java/org/openjdk/jol/info/FieldData.java @@ -168,6 +168,7 @@ public Field refField() { return refField; } + @Override public String toString() { return name + ": " + type; } diff --git a/jol-core/src/main/java/org/openjdk/jol/info/GraphLayout.java b/jol-core/src/main/java/org/openjdk/jol/info/GraphLayout.java index aeda3468..ff98243e 100644 --- a/jol-core/src/main/java/org/openjdk/jol/info/GraphLayout.java +++ b/jol-core/src/main/java/org/openjdk/jol/info/GraphLayout.java @@ -92,7 +92,9 @@ void addRecord(GraphPathRecord gpr) { } private void ensureProcessedAddresses() { - if (processedAddresses) return; + if (processedAddresses) { + return; + } synchronized (this) { if (gprs.isEmpty()) { @@ -194,7 +196,9 @@ public GraphLayout add(GraphLayout another) { private void ensureProcessedHisto() { - if (processedHisto) return; + if (processedHisto) { + return; + } synchronized (this) { classes = new TreeSet<>(new Comparator>() { @@ -394,7 +398,9 @@ public String toPrintable() { * @throws IOException when I/O fails */ public void toImage(String fileName) throws IOException { - if (addresses().isEmpty()) return; + if (addresses().isEmpty()) { + return; + } long start = startAddress(); long end = endAddress() + record(endAddress()).size(); diff --git a/jol-core/src/main/java/org/openjdk/jol/layouters/HotSpotLayouter.java b/jol-core/src/main/java/org/openjdk/jol/layouters/HotSpotLayouter.java index 9642b08c..3109fa80 100644 --- a/jol-core/src/main/java/org/openjdk/jol/layouters/HotSpotLayouter.java +++ b/jol-core/src/main/java/org/openjdk/jol/layouters/HotSpotLayouter.java @@ -296,10 +296,14 @@ private ClassLayout oldLayouter(ClassData cd) { for (FieldData f : clsData.ownFields()) { // skip already laid out fields - if (layoutedFields.contains(f)) continue; + if (layoutedFields.contains(f)) { + continue; + } // contended instance fields are handled below - if (f.isContended()) continue; + if (f.isContended()) { + continue; + } FieldAllocationType atype = FieldAllocationType.allocationTypeFor(f); int allocationTypeSize = allocationTypeSizes.get(atype); @@ -352,10 +356,14 @@ private ClassLayout oldLayouter(ClassData cd) { for (FieldData f : clsData.ownFields()) { // skip already laid out fields - if (layoutedFields.contains(f)) continue; + if (layoutedFields.contains(f)) { + continue; + } // skip non-contended fields and fields from different group - if (!f.isContended() || !f.contendedGroup().equals(currentGroup)) continue; + if (!f.isContended() || !f.contendedGroup().equals(currentGroup)) { + continue; + } FieldAllocationType atype = FieldAllocationType.allocationTypeFor(f); diff --git a/jol-core/src/main/java/org/openjdk/jol/util/MathUtil.java b/jol-core/src/main/java/org/openjdk/jol/util/MathUtil.java index 7ea4f71f..4eb573aa 100644 --- a/jol-core/src/main/java/org/openjdk/jol/util/MathUtil.java +++ b/jol-core/src/main/java/org/openjdk/jol/util/MathUtil.java @@ -28,8 +28,9 @@ public class MathUtil { public static int log2p(int x) { int r = 0; - while ((x >>= 1) != 0) + while ((x >>= 1) != 0) { r++; + } return r; } diff --git a/jol-core/src/main/java/org/openjdk/jol/util/ObjectUtils.java b/jol-core/src/main/java/org/openjdk/jol/util/ObjectUtils.java index ba71f3fc..ed2b9ac3 100644 --- a/jol-core/src/main/java/org/openjdk/jol/util/ObjectUtils.java +++ b/jol-core/src/main/java/org/openjdk/jol/util/ObjectUtils.java @@ -40,18 +40,36 @@ public class ObjectUtils { * @return toString */ public static String safeToString(Object o) { - if (o == null) return "null"; + if (o == null) { + return "null"; + } if (o.getClass().isArray()) { Class type = o.getClass().getComponentType(); - if (type == boolean.class) return Arrays.toString((boolean[]) o); - if (type == byte.class) return Arrays.toString((byte[]) o); - if (type == short.class) return Arrays.toString((short[]) o); - if (type == char.class) return Arrays.toString((char[]) o); - if (type == int.class) return Arrays.toString((int[]) o); - if (type == float.class) return Arrays.toString((float[]) o); - if (type == long.class) return Arrays.toString((long[]) o); - if (type == double.class) return Arrays.toString((double[]) o); + if (type == boolean.class) { + return Arrays.toString((boolean[]) o); + } + if (type == byte.class) { + return Arrays.toString((byte[]) o); + } + if (type == short.class) { + return Arrays.toString((short[]) o); + } + if (type == char.class) { + return Arrays.toString((char[]) o); + } + if (type == int.class) { + return Arrays.toString((int[]) o); + } + if (type == float.class) { + return Arrays.toString((float[]) o); + } + if (type == long.class) { + return Arrays.toString((long[]) o); + } + if (type == double.class) { + return Arrays.toString((double[]) o); + } Object[] oos = (Object[]) o; String[] strs = new String[oos.length]; @@ -61,15 +79,33 @@ public static String safeToString(Object o) { return Arrays.toString(strs); } - if (o.getClass().isPrimitive()) return o.toString(); - if (o.getClass() == Boolean.class) return o.toString(); - if (o.getClass() == Byte.class) return o.toString(); - if (o.getClass() == Short.class) return o.toString(); - if (o.getClass() == Character.class) return o.toString(); - if (o.getClass() == Integer.class) return o.toString(); - if (o.getClass() == Float.class) return o.toString(); - if (o.getClass() == Long.class) return o.toString(); - if (o.getClass() == Double.class) return o.toString(); + if (o.getClass().isPrimitive()) { + return o.toString(); + } + if (o.getClass() == Boolean.class) { + return o.toString(); + } + if (o.getClass() == Byte.class) { + return o.toString(); + } + if (o.getClass() == Short.class) { + return o.toString(); + } + if (o.getClass() == Character.class) { + return o.toString(); + } + if (o.getClass() == Integer.class) { + return o.toString(); + } + if (o.getClass() == Float.class) { + return o.toString(); + } + if (o.getClass() == Long.class) { + return o.toString(); + } + if (o.getClass() == Double.class) { + return o.toString(); + } return "(object)"; } diff --git a/jol-core/src/main/java/org/openjdk/jol/util/SimpleIdentityHashSet.java b/jol-core/src/main/java/org/openjdk/jol/util/SimpleIdentityHashSet.java index 99c53f70..2cd5b44d 100644 --- a/jol-core/src/main/java/org/openjdk/jol/util/SimpleIdentityHashSet.java +++ b/jol-core/src/main/java/org/openjdk/jol/util/SimpleIdentityHashSet.java @@ -65,7 +65,9 @@ public boolean add(Object o) { } final int s = size + 1; - if (s*3 > len && resize(len)) continue; + if (s*3 > len && resize(len)) { + continue; + } tab[i] = o; size = s; @@ -84,8 +86,9 @@ private boolean resize(int newCapacity) { } return false; } - if (oldLength >= newLength) + if (oldLength >= newLength) { return false; + } Object[] newTable = new Object[newLength]; diff --git a/jol-core/src/main/java/org/openjdk/jol/vm/ContendedSupport.java b/jol-core/src/main/java/org/openjdk/jol/vm/ContendedSupport.java index 0bc1f592..2fb354c2 100644 --- a/jol-core/src/main/java/org/openjdk/jol/vm/ContendedSupport.java +++ b/jol-core/src/main/java/org/openjdk/jol/vm/ContendedSupport.java @@ -103,7 +103,9 @@ private static String pullValue(Class klass, Object ann) { static volatile boolean shown; static void printErrorOnce(Throwable err) { - if (shown) return; + if (shown) { + return; + } shown = true; System.out.println("Error while accessing @Contended value: " + err.getMessage()); System.out.println(); diff --git a/jol-core/src/main/java/org/openjdk/jol/vm/HotspotUnsafe.java b/jol-core/src/main/java/org/openjdk/jol/vm/HotspotUnsafe.java index fe789ac9..6ed8c3c6 100644 --- a/jol-core/src/main/java/org/openjdk/jol/vm/HotspotUnsafe.java +++ b/jol-core/src/main/java/org/openjdk/jol/vm/HotspotUnsafe.java @@ -420,6 +420,7 @@ private int guessAlignment() { return (int) min; } + @Override public long addressOf(Object o) { Object[] array = BUFFERS.get(); diff --git a/jol-core/src/main/java/org/openjdk/jol/vm/InstrumentationSupport.java b/jol-core/src/main/java/org/openjdk/jol/vm/InstrumentationSupport.java index 571d177e..74555f80 100644 --- a/jol-core/src/main/java/org/openjdk/jol/vm/InstrumentationSupport.java +++ b/jol-core/src/main/java/org/openjdk/jol/vm/InstrumentationSupport.java @@ -57,13 +57,17 @@ public static void premain(String agentArgs, Instrumentation inst) { } static Instrumentation instance() { - if (INSTRUMENTATION != null) return INSTRUMENTATION; + if (INSTRUMENTATION != null) { + return INSTRUMENTATION; + } if (TRY_INSTALL_ATTACH) { tryAlreadyAttached(); } - if (INSTRUMENTATION != null) return INSTRUMENTATION; + if (INSTRUMENTATION != null) { + return INSTRUMENTATION; + } if (TRY_DYNAMIC_ATTACH) { try { diff --git a/jol-core/src/main/java/org/openjdk/jol/vm/VM.java b/jol-core/src/main/java/org/openjdk/jol/vm/VM.java index 8f6a02dc..6b2471ee 100644 --- a/jol-core/src/main/java/org/openjdk/jol/vm/VM.java +++ b/jol-core/src/main/java/org/openjdk/jol/vm/VM.java @@ -38,6 +38,7 @@ public class VM { private static Unsafe tryUnsafe() { return AccessController.doPrivileged( new PrivilegedAction() { + @Override public Unsafe run() { try { Field unsafe = Unsafe.class.getDeclaredField("theUnsafe"); diff --git a/jol-core/src/main/java/org/openjdk/jol/vm/VMOptions.java b/jol-core/src/main/java/org/openjdk/jol/vm/VMOptions.java index e59058a4..d18d062e 100644 --- a/jol-core/src/main/java/org/openjdk/jol/vm/VMOptions.java +++ b/jol-core/src/main/java/org/openjdk/jol/vm/VMOptions.java @@ -44,7 +44,7 @@ public static Boolean pollCompressedOops() { try { return Boolean.valueOf(getString("UseCompressedOops")); } catch (Exception exp) { - // TODO: log + System.out.println("# WARNING: Unable to get compressed oops. " + exp.getMessage()); return null; } } @@ -53,7 +53,7 @@ public static Boolean pollCompressedClassPointers() { try { return Boolean.valueOf(getString("UseCompressedClassPointers")); } catch (Exception exp) { - // TODO: log + System.out.println("# WARNING: Unable to get compressed class pointers" + exp.getMessage()); return null; } } @@ -63,11 +63,11 @@ public static Integer pollObjectAlignment() { try { return Integer.valueOf(getString("ObjectAlignmentInBytes")); } catch (Exception exp) { - // TODO: log + System.out.println("# WARNING: Unable to get object alignment in bytes. " + exp.getMessage()); return null; } } - // TODO: log + System.out.println("# WARNING: the compressed oops is unavailable"); return null; }