Ich habe Zweifel in Speicherzuweisung für int und Integer-Variable in Java. Um Speicher zu messen, habe ich Instrumentation.getObjectSize() verwendet und es erzeugt die gleiche Größe für beide Variablen. Bitte finden meinen Code unten:Speichergröße von Int vs Ganzzahl in Java
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);
}
}
Test.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
}
}
Im obigen Fall sowohl die variable Größe druckt das gleiche. Mein Zweifel ist, Int ist primitiver Typ und es Größe 4 Bytes und Integer ist Referenztyp und seine Größe ist 16 Bytes, aber in diesem Fall warum 16 Bytes für beide Werte produziert? Wenn beide die gleiche Menge an Speicher in Heap nehmen, führt dies zu Speicherproblemen in Java, oder?
Wierd. Ich hätte inzwischen eine Menge Upvotes erwartet. Hier ist einer von mir. – Bathsheba
Gibt es eine Möglichkeit, die Größe der Variablen/des Objekts in Java zu erhalten? –
Sie können eine Last von Überladungen für getObjectSize erstellen und die Werte fest codieren. – Bathsheba