java - 我如何检查java中对象的内存使用情况

标签 java android object memory

<分区>

更新

我试过

的答案

In Java, what is the best way to determine the size of an object?

但是当我尝试下面的代码时,下面的代码给了我 16

public class MemoryTest {

    public static void main(String[] args) {
        System.out.println(ObjectSizeFetcher.getObjectSize(new ArrayList<>().add(new DummyObject())));
    }
}

而16不是我要找的,所以我又问了这个问题。 这道题还是重复题吗?


我想检查一个对象的内存使用情况,这是我尝试过的。 ( java 8)

// Dummy Object class
public class DummyObject {
    int dummy;
}

// Separate class to check memory
public class MemoryTest {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();

        long before = runtime.totalMemory() - runtime.freeMemory();
        DummyObject obj = new DummyObject();
        long after = runtime.totalMemory() - runtime.freeMemory();

        System.out.println(after - before);
    }
}

结果为“0”

谁能告诉我
1. 为什么结果是0
2. 什么是衡量对象内存使用的正确方法

提前致谢


更新

当我在 Android 项目中尝试如下相同的代码时,(SDK 版本 23)

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Runtime runtime = Runtime.getRuntime();

        long before = runtime.totalMemory() - runtime.freeMemory();
        DummyObject obj = new DummyObject();
        long after = runtime.totalMemory() - runtime.freeMemory();

        System.out.println("test memory: " + (after - before));
    }
}

结果是“680”

是什么造成了这种差异,为什么?

最佳答案

接口(interface) Instrumentation 提供了一个名为 getObjectSize() 的方法

Returns an implementation-specific approximation of the amount of storage consumed by the specified object. The result may include some or all of the object's overhead, and thus is useful for comparison within an implementation but not between implementations. The estimate may change during a single invocation of the JVM.

返回指定对象消耗的存储量的特定于实现的近似值

也许这可以帮到你。

Documentation of Interface Instrumentation

关于java - 我如何检查java中对象的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33252833/

相关文章:

java - 在描述中给出的场景中如何暂停程序执行?

android - 无法启动接收器 android.support.v4.media.session.MediaButtonReceiver

java - 在 android 4.4.2 中发送没有用户界面的短信

java - 如何在更改原始引用变量后再次引用 Java 对象

javascript - 通过 JSON 文件创建大型客户端 Javascript 对象数组的替代方案?

java - 如何将youtube嵌入我的应用程序中,现在将其转到youtube网站

java - 如何用java中的接口(interface)覆盖方法

javascript - 如何使对象的名称动态化

java - 在 Java 中使用 C++ 函数

java - 如何在处理中使用 boolean 数组制作按钮?