static int unsafe_sizeOf(O o){ int NR_BITS = Integer.valueOf(System.getProperty("sun.arch.data.model")); int BYTE = 8; int WORD = NR_BITS/BYTE; int MIN_SIZE = 16; Class src = _getClass(o); new L instanceFields; do { if(src == Object.class) return MIN_SIZE; for (Field f : src.getDeclaredFields()) { if((f.getModifiers() & Modifier.STATIC) == 0) instanceFields.add(f); } src = src.getSuperclass(); } while(instanceFields.isEmpty()); long maxOffset = 0; for (Field f : instanceFields) { long offset = theUnsafe().objectFieldOffset(f); if (offset > maxOffset) maxOffset = offset; } ret (((int) maxOffset/WORD) + 1)*WORD; }