HBASE-6915 String and ConcurrentHashMap sizes change on jdk7; makes TestHeapSize fail

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1392731 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael Stack 2012-10-02 04:13:53 +00:00
parent 7adcc74aeb
commit 29f919440a
1 changed files with 19 additions and 5 deletions

View File

@ -20,14 +20,14 @@
package org.apache.hadoop.hbase.util;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
/**
* Class for determining the "size" of a class, an attempt to calculate the
* actual bytes that an object of this class will occupy in memory
@ -101,6 +101,20 @@ public class ClassSize {
/** Overhead for CopyOnWriteArrayList */
public static final int COPYONWRITE_ARRAYLIST;
/* Are we running on jdk7? */
private static final boolean JDK7;
static {
final String version = System.getProperty("java.version");
// Verify String looks like this: 1.6.0_29
if (!version.matches("\\d\\.\\d\\..*")) {
throw new RuntimeException("Unexpected version format: " + version);
}
// Convert char to int
int major = (int)(version.charAt(0) - '0');
int minor = (int)(version.charAt(2) - '0');
JDK7 = major == 1 && minor == 7;
}
/**
* Method for reading the arc settings and setting overheads according
* to 32-bit or 64-bit architecture.
@ -131,9 +145,9 @@ public class ClassSize {
TREEMAP = align(OBJECT + (2 * Bytes.SIZEOF_INT) + align(7 * REFERENCE));
STRING = align(OBJECT + ARRAY + REFERENCE + 3 * Bytes.SIZEOF_INT);
STRING = align(OBJECT + ARRAY + REFERENCE + ((JDK7? 2: 3) * Bytes.SIZEOF_INT));
CONCURRENT_HASHMAP = align((2 * Bytes.SIZEOF_INT) + ARRAY +
CONCURRENT_HASHMAP = align(((JDK7? 3: 2) * Bytes.SIZEOF_INT) + ARRAY +
(6 * REFERENCE) + OBJECT);
CONCURRENT_HASHMAP_ENTRY = align(REFERENCE + OBJECT + (3 * REFERENCE) +