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

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

问题描述:

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

心路历程:

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

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

总结

造成这次错误思考的原因是
对对象在内存中大小的计算比较模糊
在这里插入图片描述

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值