欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

估算一个Java对象要占用多少内存

程序员文章站 2022-04-13 11:28:57
...

记录今天遇到的一个问题:

问题描述:

	我今天看项目代码时发现,有一个对象池中的对象的模板类中有着几十个方法,然后我就想: 
		这样的话对象池中的对象重复的内存空间太多,大量对象入池后会不会造成服务器内存的
		浪费,是不是应该把这些方法抽离出来

心路历程:

  • 错误的思路:
    ①如果抽离出来就必须得用static方法来修饰方法
    ②当高并发时为了不产生错误就得给静态方法同步或者加锁
    ③然后不使用静态方法就会产生内存资源浪费,加锁影响性能
  • 归正:
    ④然后查看了下面这篇文章,知道了对象在内存中的存储方式:
    引用原文中的一段话

聊到这里,有同学心里就会有一些疑问:上面的内容,只说了对象头和对象的属性,那么对象的方法哪儿去了?难道对象的方法不需要占用内存来存储吗?
很好,如果你有这个疑问,说明你经过了认真的思考。确实,对象的方法也是需要存储的,要不然,程序怎么知道某个方法具体的操作?但是,这部分内容并不是存储在实例对象上的,而是存储在Class对象上的。要执行某个方法时,程序根据对象头中的指向类的指针,就能找到Class对象,就能找到对应的方法。换做你来设计Java,你应该也不会把这部分内容放到实例对象上,因为同一个类的所有实例对象,他们的方法逻辑是同样的。也就是说,存一份就足够了,没必要搞那么多。

总结

造成这次错误思考的原因是
对对象在内存中大小的计算比较模糊
估算一个Java对象要占用多少内存

估算一个Java对象要占用多少内存: https://baijiahao.baidu.com/s?id=1638466884416034092&wfr=spider&for=pc