如何计算64位Java内存成本

如何计算64位Java内存成本,java,memory,garbage-collection,jvm,heap,Java,Memory,Garbage Collection,Jvm,Heap,我试图找到一个简单而准确的Java 64位对象的字节成本参考。我没能找到这个。原语是明确指定的,但有所有这些边缘情况和例外,我试图找出像填充对象和成本vrs。它们在堆上实际占用的空间,等等。从我在这里阅读的要点来看:这实际上是不同的??:-/ 如果关闭TLAB,您将获得准确的记帐,并且您可以确切地看到每个对象分配使用了多少内存 查看内存使用位置的最佳方法是通过内存分析器。在这里担心字节,这很可能是浪费时间。当您有数百MB的内存时,它会产生不同的效果,最好的方式是在探查器中查看 顺便说一句,大多数

我试图找到一个简单而准确的Java 64位对象的字节成本参考。我没能找到这个。原语是明确指定的,但有所有这些边缘情况和例外,我试图找出像填充对象和成本vrs。它们在堆上实际占用的空间,等等。从我在这里阅读的要点来看:这实际上是不同的??:-/

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

查看内存使用位置的最佳方法是通过内存分析器。在这里担心字节,这很可能是浪费时间。当您有数百MB的内存时,它会产生不同的效果,最好的方式是在探查器中查看


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

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

查看内存使用位置的最佳方法是通过内存分析器。在这里担心字节,这很可能是浪费时间。当您有数百MB的内存时,它会产生不同的效果,最好的方式是在探查器中查看


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

您本质上是在寻求一种简单的方法来获得Java中对象大小的准确预测

不幸的是。。。没有一个

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

实际上,您可以选择以下选项:

根据你所知道的估计尺寸,并接受你的估计可能是错误的。如果你考虑了足够的因素,你应该能够得到合理的大概估计,至少对于一个特定的平台。但准确的预测本身就是一项艰巨的工作

使用TLAB技术编写微基准测试,以测量对象的大小


另一点是,在大多数情况下,如果对象大小预测不完全准确,这并不重要。建议的方法是实施、测量和优化。这不需要精确的尺寸信息,直到您进入优化阶段,此时您可以测量尺寸。。。如果您需要这些信息。

您本质上是在寻求一种简单的方法来准确预测Java中的对象大小

不幸的是。。。没有一个

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

实际上,您可以选择以下选项:

根据你所知道的估计尺寸,并接受你的估计可能是错误的。如果你考虑了足够的因素,你应该能够得到合理的大概估计,至少对于一个特定的平台。但准确的预测本身就是一项艰巨的工作

使用TLAB技术编写微基准测试,以测量对象的大小


另一点是,在大多数情况下,如果对象大小预测不完全准确,这并不重要。建议的方法是实施、测量和优化。这不需要精确的尺寸信息,直到您进入优化阶段,此时您可以测量尺寸。。。如果您需要这些信息。

如果您不在白板上参加面试,则可以复制上述示例。另一方面,如果你是。。。我在这里的主要问题是,我们应该对这一点有足够的了解,以便在计算算法的内存效率时有用。根据对这个问题的回答,也不是非常准确。例如,我知道字符串表,但在数据的情况下,我们可以假设大多数(如果不是全部的话)字符串都不相同。当您担心算法的内存效率时,通常会担心数组大小。数组需要固定的开销加上实际数据的大小——字节、字符、int、double,或者乘以元素数。这是一个毫无意义的面试问题,没有一个正确的答案。他们可能一直在期待关于测量方法的答案。或者他们只是错了,炫耀,等等。可能重复上面的例子
如果你不在白板上参加面试,这没关系。另一方面,如果你是。。。我在这里的主要问题是,我们应该对这一点有足够的了解,以便在计算算法的内存效率时有用。根据对这个问题的回答,也不是非常准确。例如,我知道字符串表,但在数据的情况下,我们可以假设大多数(如果不是全部的话)字符串都不相同。当您担心算法的内存效率时,通常会担心数组大小。数组需要固定的开销加上实际数据的大小——字节、字符、int、double,或者乘以元素数。这是一个毫无意义的面试问题,没有一个正确的答案。他们可能一直在期待关于测量方法的答案。或者他们只是错了,炫耀等等。