如何计算64位Java内存成本

时间:2014-07-18 19:31:32

标签: java memory garbage-collection jvm heap

我正在尝试为Java 64位对象的字节成本找到一个简单而准确的参考。我找不到这个。原语是明确指定的,但是我想要解决的所有这些边缘情况和异常都像对象和成本vrs的填充。他们实际上占据了堆的空间等等。从我在这里阅读的要点:http://btoddb-java-sizing.blogspot.com/实际上可能是不同的? : - /

2 个答案:

答案 0 :(得分:3)

如果关闭TLAB,您将获得准确的记帐,并且您可以准确地看到每个对象分配使用的内存量。

查看内存使用位置的最佳方法是通过内存分析器。在这里担心字节,很可能是浪费时间。如果你有数百MB,那么它会有所不同,最好的方法就是在分析器中。

BTW大多数系统使用32位引用,即使在64位JVM中也是如此。没有64位对象这样的东西。除了标头之外,无论是32位JVM还是在64位JVM中使用32位引用,对象都将使用相同的空间。

答案 1 :(得分:1)

您实际上是在寻求一种简单方式来获取Java中对象大小的准确预测

不幸的是...... 没有一个!

您发现的博客文章提到了许多复杂因素。另一个是对象大小计算可能会从一个Java版本更改为下一个Java版本,或者在不同的Java实现供应商之间。

在实践中,您可以选择:

  • 根据您的知识估算尺寸,并接受您的估算可能有误。 (如果你考虑到足够的因素,你应该能够得到合理的球场估计值,至少对于一个特定的平台。但准确的预测本来就是一项艰苦的工作。)

  • 使用TLAB技术编写微基准来测量对象的大小。


另一点是,在大多数情况下,如果对象大小预测不完全准确则无关紧要。建议的方法是实施,测量然后优化。在进入优化阶段之前,这不需要准确的尺寸信息,此时您可以测量尺寸......如果您需要信息。