如何知道我们的对象使用了多少内存?

How to know how much memory our object uses?

我知道int使用32位。 Long 使用 64 位等...但是,我们怎么知道我们的对象使用了多少内存?我有一个 class 这样的:

class Utils{
   public String getName(Context context){
      return "Sambhav"
   }
}

现在,我怎么知道这个 class 使用了多少内存?

你不能。你只能做一些非常粗略的估计。这取决于您的 JRE 版本。

  • 每个实例都有用于管理信息的最小内存占用,例如对定义的引用 class,可能是 16 个字节。
  • 对于每个实例字段,添加该字段的“大小”,如果字段类型比 JRE 中使用的默认对齐方式短,则加上一些填充。
  • A class 是名为 Class 的 class 的实例,除了声明的字段 static 之外,还有很多内部字段和数据结构。它“保存”了在那里定义的方法的字节码,以及来自 HotSpot Just-In-Time 编译器的任何已编译本机方法版本。因此,几乎不可能估计向 JRE 添加新 class 的内存消耗。
  • "Sambhav" 这样的字符串文字会添加一个 String 实例到常量池中(如果它不存在的话)。 String 实例至少有一个长度字段和一个包含字符的数组。内部细节随着不同版本的 JRE 而改变。

现在分析您的 Utils class 片段:

  • 你只有class,没有实例。因此,将 class 的(未知)内存占用添加到您的计算中。
  • 您的用户代码需要一个 String 常量池中可能不存在的文字。因此,在您的计算中添加两个实例,一个 String 实例加一个 character-holding 数组,数组的占用空间当然取决于字符串长度。