一个java类占用的内存

总共:96byte
1KB = 1024BYTE
1024/96=10.6
1MB = 1024KB = 可以缓存10240个数据.

===============================================================================================

public class LimitInfoByKeySnBO {

//1.对象头 8 byte
//2.retCode 4byte
//3.retMsg 空,8(对象头)+4(引用)+4(对齐)byte
//4.residualValidityPeriod,8+8,16字节
//5.endTime,yyyy-MM-dd HH:mm:ss,8+40字节
总共:96byte
1KB = 1024BYTE
1024/96=10
1MB = 1024KB = 可以缓存10240个数据.

private int retCode;
private String retMsg;
private Integer residualValidityPeriod;
private String endTime;
}

===============================================================================================

计算一个java类占用的内存.
A:对象头
内存中,每个对象占用的总空间不仅包含对象内声明的变量所需要的空间,还包括一些额外信息,比如:对象头 和 填充物。“对象头”的作用是用来记录一个对象的实例名字、ID 和 实例状态(例如,当前实例是否“可到达”,或者当前锁的状态等等)。
在当前的JVM版本中(Hotspot),“对象头”占用的字节数如下:

一个普通对象,占用8 bytes
数组,占用 12 bytes,包含普通对象的 8 bytes + 4 bytes(数组长度)
B:基本类型

boolean、byte 占用 1 byte,char、short 占用 2 bytes,int、float 占用 4 bytes,long、double 占用 8 bytes
C:引用类型
每个引用类型占用 4 bytes
D:填充物
在Hotspot中,每个对象占用的总空间是以8的倍数计算的,对象占用总空间(对象头+声明变量)不足8的倍数时候,自动补齐。而,这些被填充的空间,我们可以称它为“填充物”。我们看下具体实例:

byte:1个字节,8位,-128~127 最大存储数据量 255

short:2个字节,16位,-32768~32767 最大存储数据量 65535

char:2个字节,16位,存储Unicode编码,用‘’

int:4个字节,32位,负的2的31次方~2的31次方-1 最大存储数据量 2的31次方-1

float:4个字节,32位

double:8个字节,64位

long:8个字节,64位,负的2的64次方~2的64次方-1 最大存储数据量 2的64次方-1


————————————————————————————————————————————————————————————————

猜你喜欢

转载自www.cnblogs.com/sea520/p/13186287.html