diff --git a/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java b/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java index e184730..dbae188 100755 --- a/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java +++ b/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java @@ -109,12 +109,19 @@ public class ClassSize { REFERENCE = 8; } + boolean isIBM = System.getProperty("java.vendor").contains("IBM"); + OBJECT = 2 * REFERENCE; ARRAY = align(3 * REFERENCE); - ARRAYLIST = align(OBJECT + align(REFERENCE) + align(ARRAY) + + if (isIBM) { + ARRAYLIST = align(OBJECT + align(REFERENCE) + align(ARRAY) + + (3 * Bytes.SIZEOF_INT)); + } else { + ARRAYLIST = align(OBJECT + align(REFERENCE) + align(ARRAY) + (2 * Bytes.SIZEOF_INT)); + } //noinspection PointlessArithmeticExpression BYTE_BUFFER = align(OBJECT + align(REFERENCE) + align(ARRAY) + @@ -129,8 +136,13 @@ public class ClassSize { STRING = align(OBJECT + ARRAY + REFERENCE + 3 * Bytes.SIZEOF_INT); - CONCURRENT_HASHMAP = align((2 * Bytes.SIZEOF_INT) + ARRAY + - (6 * REFERENCE) + OBJECT); + if (isIBM) { + CONCURRENT_HASHMAP = align((2 * Bytes.SIZEOF_INT) + ARRAY + + (7 * REFERENCE) + OBJECT); + } else { + CONCURRENT_HASHMAP = align((2 * Bytes.SIZEOF_INT) + ARRAY + + (6 * REFERENCE) + OBJECT); + } CONCURRENT_HASHMAP_ENTRY = align(REFERENCE + OBJECT + (3 * REFERENCE) + (2 * Bytes.SIZEOF_INT));