# 本文展示了在Java中估计对象内存分配的三种方法。对所有方法和实例进行了比较。
# 估计分配的内存(不是对象大小)
以前,我解释了如何计算对象的大小考虑OS二进制或对象和原语类型。在本文中,我将只回顾估计给定对象已经分配的内存大小的方法。有几种方法可以做到。在这里,我们回顾最流行的。
# 利用Profiler估计内存
估计某些对象的内存最简单的方法是使用分析器(如可视VM.

这种方法的问题是,您必须连接到运行中的JVM,由于安全原因,这在生产环境中可能是不可能的。
# 使用仪器估计内存
另一种由给定对象估计分配内存的方法是使用仪器工具。简而言之,我们需要创建一个类并将其编译成JAR。创建JAR之后,我们必须与JAR一起执行JVM。您可以找到有关此方法的详细信息。这里。这种方法的缺点是需要向JVM中添加特定的JAR,由于安全性或相关问题,它可能无法用于生产。
# 利用JOL库估计内存
作为另一种选择,我们可以使用Jol图书馆。它是一个非常强大的库,可以提供关于对象权重和对象实例分配的内存的详细估计。要使用库,我们需要添加依赖项:
```
jol-core
```
之后,我们就可以这样使用它:
```
out.println(GraphLayout.parseInstance(myObject).totalSize() / 1024000d + " MB")
```
因此,我们将看到myObject及其内部内容分配的兆字节数。不幸的是,这种方法将消耗大量的内存和时间,并且不适合大多数对象。
# 来自Twitter存档的ObjectSizeCalculator
在开放源码中有一个工具类。Twitter GitHub储存库,它可以估计给定对象实例的分配内存。ObjectSizeCalculator。这个解决方案不会占用很多内存或时间。估计过程需要几秒钟,即使对大物体也是如此。这个类型的使用非常简单:
```
ObjectSizeCalculator.getObjectSize(address)
```
我推荐这种方法,但请记住,它只受Java Hotpot、OpenJDK和TwitterJDK的支持。
# 最后
谢谢大家的观看,小伙伴们如果觉得我写的不错,点赞+收藏!
更多的java学习资料博主已经整理好了,需要的小伙伴可以点击[获取学习资料](https://docs.qq.com/doc/DWkd2b1FqcmlEeGdK)



