gpt4 book ai didi

java - java中int与整数的内存大小

转载 作者:行者123 更新时间:2023-12-03 10:38:50 25 4
gpt4 key购买 nike

我对 Java 中 int 和 Integer 变量的内存分配有疑问。为了测量内存,我使用了 Instrumentation.getObjectSize() 并且它为两个变量产生相同的大小。请在下面找到我的代码:

ObjectSizeFetcher.java

import java.lang.instrument.Instrumentation;

public class ObjectSizeFetcher {
private static Instrumentation instrumentation;

public static void premain(String args, Instrumentation inst) {
instrumentation = inst;
}

public static long getObjectSize(Object o) {
return instrumentation.getObjectSize(o);
}
}

测试.java
public class Test {
public static void main(String[] args) throws Exception {
int i=0;
Integer i1 = new Integer(0);
long value = ObjectSizeFetcher.getObjectSize(i);
System.out.println(value);//prints 16

long value1 = ObjectSizeFetcher.getObjectSize(i1);
System.out.println(value1);//prints 16
}
}

在上述情况下,可变大小打印相同。我的疑问是,int 是原始类型,大小为 4 个字节,Integer 是引用类型,大小为 16 个字节,但在这种情况下,为什么为这两个值生成 16 个字节?如果两者在堆中占用相同数量的内存意味着,它会导致 java 中的内存问题,对吗?

最佳答案

i被自动装箱到 Integer当传递给 getObjectSize .

所以你得到提升变量大小的值,不是 原始原始 int .

为了规避这种行为,构建 getObjectSize 的重载对于原始情况:

public static long getObjectSize(int o) {
return Integer.SIZE / 8;
}

等等。

关于java - java中int与整数的内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44433345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com