估算一个Java对象要占用多少内存
程序员文章站
2022-04-13 11:28:57
...
记录今天遇到的一个问题:
问题描述:
我今天看项目代码时发现,有一个对象池中的对象的模板类中有着几十个方法,然后我就想:
这样的话对象池中的对象重复的内存空间太多,大量对象入池后会不会造成服务器内存的
浪费,是不是应该把这些方法抽离出来
心路历程:
- 错误的思路:
①如果抽离出来就必须得用static方法来修饰方法
②当高并发时为了不产生错误就得给静态方法同步或者加锁
③然后不使用静态方法就会产生内存资源浪费,加锁影响性能 - 归正:
④然后查看了下面这篇文章,知道了对象在内存中的存储方式:
引用原文中的一段话
聊到这里,有同学心里就会有一些疑问:上面的内容,只说了对象头和对象的属性,那么对象的方法哪儿去了?难道对象的方法不需要占用内存来存储吗?
很好,如果你有这个疑问,说明你经过了认真的思考。确实,对象的方法也是需要存储的,要不然,程序怎么知道某个方法具体的操作?但是,这部分内容并不是存储在实例对象上的,而是存储在Class对象上的。要执行某个方法时,程序根据对象头中的指向类的指针,就能找到Class对象,就能找到对应的方法。换做你来设计Java,你应该也不会把这部分内容放到实例对象上,因为同一个类的所有实例对象,他们的方法逻辑是同样的。也就是说,存一份就足够了,没必要搞那么多。
总结
造成这次错误思考的原因是
对对象在内存中大小的计算比较模糊
估算一个Java对象要占用多少内存: https://baijiahao.baidu.com/s?id=1638466884416034092&wfr=spider&for=pc
上一篇: 哇哈哈