【发布时间】:2016-01-20 01:37:36
【问题描述】:
更新
我尝试了
的答案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”
造成这种差异的原因是什么?
【问题讨论】:
-
@user2932011 请参阅下面的内存分析答案。我认为您不是在寻找内存中单个对象的内存占用。 (或者你是吗?)如果你正在寻找一个类的所有实例的内存大小,那么你需要内存分析。
标签: java android object memory