小编Gen*_*yan的帖子

在对象大小方面,Dalvik对HotSpot的记忆力是否更大?

我一直想知道Object在Android上占用了多少内存.有许多与HotSpot JVM相关的资源(如此)告诉空对象占用8个字节,空数组占用12个字节,并且所有对象都与8字节边界对齐.因此,没有额外字段的对象应该占用8个字节,最小的对象至少有一个额外字段--16个字节,一个空数组--16个字节,对吧?

我在这个问题上没有找到关于Dalvik的具体信息,并决定通过测试来弄清楚.运行测试结果令人惊讶.

关于计算方法的几句话.Android的Object.hashCode()实现只返回指向int的对象的指针.(似乎很明显和一般,但[另一个惊喜]事实证明,它不在HotSpot JVM上 - 例如使用HotSpot运行MemTest并查看).所以,我在Dalvik上使用了hashCode()的简单性来计算Android上的对象大小,通过在一行中分配测试类的两个实例,并且分配的空间量应该等于它们的hashCode()的差异值(假设Dalvik在完全随机的地址分配它们没有多大意义).只是为了确保每个测试类连续分配4个对象,这总是提供了hashCode()的相同差异.所以,我相信这种方法的正确性毫无疑问.

以下是测试的源代码:

public class MemTest {
    public static void run() {
        Object o1 = new Object();
        Object o2 = new Object();
        Object o3 = new Object();
        Object o4 = new Object();

        EmptyObject eo1 = new EmptyObject();
        EmptyObject eo2 = new EmptyObject();
        EmptyObject eo3 = new EmptyObject();
        EmptyObject eo4 = new EmptyObject();

        ObjectWithBoolean ob1 = new ObjectWithBoolean();
        ObjectWithBoolean ob2 = new ObjectWithBoolean();
        ObjectWithBoolean ob3 = new ObjectWithBoolean();
        ObjectWithBoolean ob4 = new …
Run Code Online (Sandbox Code Playgroud)

java android memory-management dalvik

26
推荐指数
2
解决办法
1883
查看次数

标签 统计

android ×1

dalvik ×1

java ×1

memory-management ×1