潍坊网站制作厂家,网站怎么加ico,淮北网站制作,chinacd.wordpress今天翻记录看到了自己15年3月份提的问题#xff0c;现在已经18年6月份了#xff1b;去年线上项目出现内存瓶颈#xff0c;原因是缓存的玩家角色数据过多#xff0c;在长时间不停服的情况下#xff0c;导致数据越来越膨胀#xff0c;之前没有清除无用缓存的机制#xff0…今天翻记录看到了自己15年3月份提的问题现在已经18年6月份了去年线上项目出现内存瓶颈原因是缓存的玩家角色数据过多在长时间不停服的情况下导致数据越来越膨胀之前没有清除无用缓存的机制并且缓存数目上限过高期间组里进行了一次内存大小计算学习各个Java对象自身占用的堆大小都可以通过对象的数据结构计算得出且最终的计算结果与jmap查看的单个对象大小一致通过jmap查看内存对象每个Long和Integer占用内存24字节这24字节分别都是什么东西www.zhihu.com--------------------------通过内存计算对Java对象的内存分布可以有个更加清晰的认识1.比如一个对象当中如果有数组对象比如java.util.ArrayList对象有个数组对象private transient Object[] elementData对象那么在64位系统未开启指针压缩的情况下至少有一个8字节的指针引用消耗以及数组对象本身的消耗比如对象大小初始化为10数组本身的对象消耗将为8字节的makrword 8字节的class指针 8字节的数组长度 10 * 8 字节的数组引用指针消耗那么你个空的为10大小的数组消耗为8 8 8 10 * 8 104字节 正好对齐了再加上本身ArrayList对象的对象头 (8字节MarkWord 8字节的class指针) 4字节的size成员变量 8字节的数组对象指针消耗 4字节的modCount成员变量 32字节那么一共将是 32 104 140字节------------------------甚至我们在计算一个内部类的大小的时候会发现内部类除了那些显示的内存占用外还将保存一个父类的引用因为会多出8字节来。