代码之家  ›  专栏  ›  技术社区  ›  Eduardo Rascon

如何在内存堆中获取Java对象的占用空间?

  •  3
  • Eduardo Rascon  · 技术社区  · 14 年前

    一个对象从内存堆中占用多少空间?怎么能做到?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Eyal Schneider    14 年前

    这远比仅仅使用空闲内存计算复杂得多(它不考虑垃圾收集和其他线程的新分配)。看一看:

    http://www.javaspecialists.eu/archive/Issue142.html

    不过,这是先进的东西。

    --编辑——

    上面的解决方案发现 深的 对象的大小(使用堆栈遍历引用网络、访问的引用集合,当然还有检测)。

    但是,得到 浅的 对象的尺寸更简单,并且可以通过Java 1.5的仪器实现而不需要额外的工作(参见 Instrumentation.getObjectSize() )

        2
  •  0
  •   Mike Tunnicliffe    14 年前

    一个对象所占用的内存量因一个JVM实现到下一个而不同,有时因一个平台到下一个平台而不同。

    您可以通过计算声明为对象类实例变量的基元类型和对象引用的数量和大小来估计数量。

    例如:

    public class Monkey {
      int arms;
      Animal parent;
    }
    

    ..有1个对象引用和1个int原语,在32位体系结构上它将占用 大约 每个实例8个字节。