1 Object[] objects = new Object[100000];
会直接分配内存
2. ArrayList<Byte> 不允许一直添加数据添加超过1,197,571,636 接近12亿
for (; i <= Integer.MAX_VALUE - 3; i++) { list.add(tb); }
LinkedList<Byte> 一直添加数据会引起Full GC,每次Full GC 33s,但很长时间没有发现OOM
/**
* Created by on 2018/5/19.
*/
public class ComputeObjectSize {
public static void main(String[] args) {
//指针不压缩8
// 对象头(8) + 对象指针(8) + 数组长度(4) + 实例数据(8 * 10) + Padding(4) = 104
//指针压缩4
//对象头(8) + 对象指针(4) + 数组长度(4) + 实例数据(4 * 10) = 56
System.out.println("empty object[10]: " + PreMain.sizeOf(new Object[10]));
//指针不压缩8
// 对象头(8) + 对象指针(8) = 16
//指针压缩4
//对象头(8) + 对象指针(4) + Padding(4) = 16
System.out.println("ordinary object: " + PreMain.sizeOf(new Object()));
//指针不压缩8
// 对象头(8) + 对象指针(8) + 实例数据(8) = 24
//指针压缩4
//对象头(8) + 对象指针(4) + 实例数据(8) + Padding(4) = 24
System.out.println("full Object Long Size : " + PreMain.sizeOf(new Long((120393))));
//指针非压缩
// 对象头(8) + 对象指针(8) + 数组长度(4) + 实例数据(0 * 10) + Padding(4) = 24
//指针压缩4
//对象头(8) + 对象指针(4) + 数组长度(4) + 实例数据(0 * 10) = 16
System.out.println("empty object[0]: " + PreMain.sizeOf(new Object[0]));
Object[] ten = new Object[10];
System.out.println("full object[10] before : " + PreMain.sizeOf(ten));
for (int i = 0; i < ten.length; i++) {
ten[i] = new Long(i);
}
System.out.println("full object[10] after : " + PreMain.sizeOf(ten));
}
}