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 { for (Field f : src.getDeclaredFields()) { if((f.getModifiers() & Modifier.STATIC) == 0) instanceFields.add(f); } src = src.getSuperclass(); } while(instanceFields.isEmpty()); long maxOffset = MIN_SIZE; if (o instanceof O[]) { int n = l((O[]) o); print("n=" + n); maxOffset = lowestValue(unsafe_allFieldOffsets(Pair)) + 4 + 4*(n-1); // TODO: without compressed oops etc. } else for (Field f : instanceFields) { long offset = theUnsafe().objectFieldOffset(f); if (offset > maxOffset) maxOffset = offset; } ret (((int) maxOffset/WORD) + 1)*WORD; }