Rumah > Soal Jawab > teks badan
天蓬老师2017-04-18 10:51:59
Jika anda ingin menerangkan saiz cetek dengan jelas, anda mesti menyebut Saiz Tertahan.
saiz cetek: Menunjukkan saiz yang diduduki oleh objeknya sendiri.
saiz tertahan: saiz tertahan objek sendiri + objek rujukan.
Mari meminjam gambar dahulu, yang boleh mewakili hubungan pengiraan antara mereka dengan lebih jelas.
Saiz cetek B = B;
Saiz dikekalkan B = saiz cetek B + saiz dikekalkan C + saiz dikekalkan D;
Sebelum memberikan contoh, anda mesti terlebih dahulu memahami penyimpanan objek JAVA dalam timbunan Mari kita ambil mesin maya JVM 32-bit sebagai contoh:
Objek JAVA terdiri daripada 3 bahagian dalam timbunan:
Pengepala objek
Pengepala objek mengandungi dua bahagian data
Satu: data masa jalan. JVM 32-bit ialah 32-bit, iaitu 4bait 64-bit ialah 8bait.
ialah data yang menyimpan pembolehubah tikar termasuk dua jenis pembolehubah asas dan pembolehubah rujukan.
Jangan bercakap tentang saiz bait yang diduduki oleh pembolehubah jenis asas Kami menyimpan penunjuk dalam pembolehubah rujukan.
Ruang storan objek ialah gandaan integer 8 bait Jika pengepala objek + data tika kurang daripada gandaan integer 8 bait, ia akan diisi.
Kami akan menerangkan di bawah berdasarkan contoh:
public class TestObjSize {
private int a = 1;
private boolean b = true;
private TestObjSize testObjSize;
public static void main(String[] args) {
Object object = new Object();
TestObjSize test = new TestObjSize();//这个new出来的对象记为obj1
test.testObjSize = new TestObjSize();//这个new出来的对象记为obj2
System.out.println(object.hashCode());
System.out.println(test.hashCode());
try {
Thread.sleep(3000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Oleh kerana saiz cetek tidak ada kaitan dengan sama ada pembolehubah contoh mempunyai rujukan, kami mula-mula menganalisis saiz cetek **TestObjSize, saiz cetek = 4bait (pengepala objek) + 4bait (penunjuk jenis) + 4bait (int a) + 1byte(boolean b) + 4byte(rujukan TestObjSize) = 17;**
17 bukan gandaan integer bagi 8, jadi akan terdapat 7 bait data padding objek jenis TestObjSize = 24;
saiz tertahan obj2 = saiz cetek obj2 = 24
Obj1 objek testObjSize ialah obj2, jadi obj1s saiz cetek = obj1's; saiz + saiz dikekalkan obj2 = 48;
Jika terdapat sebarang kesilapan, sila beritahu saya.