相关疑难解决方法(0)

在对象大小方面,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上的内存中放置Java对象?

我非常熟悉HotSpot中堆上对象的布局,但对于Android来说并不是那么多.

例如,在32位HotSpot JVM中,堆上的对象实现为8字节头,后跟对象的字段(一个字节用于boolean引用,四个字节用于引用,其他所有内容按预期方式),布局以某种特定的顺序(对超类中的字段有一些特殊规则),并填充为8个字节的倍数.

我做了一些研究,但我找不到任何特定于Android的信息.

(我有兴趣优化一些极其广泛使用的数据结构,以最大限度地减少Android上的内存消耗.)

java android jol

21
推荐指数
1
解决办法
1503
查看次数

标签 统计

android ×2

java ×2

dalvik ×1

jol ×1

memory-management ×1