Rumah  >  Soal Jawab  >  teks badan

android - java中使用MAT是shallow size 单位是什么

java中shallow size 单位是什么

伊谢尔伦伊谢尔伦2744 hari yang lalu850

membalas semua(1)saya akan balas

  • 天蓬老师

    天蓬老师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:

    1. Pengepala objek
      Pengepala objek mengandungi dua bahagian data
      Satu: data masa jalan. JVM 32-bit ialah 32-bit, iaitu 4bait 64-bit ialah 8bait.

    2. Data tika

      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.

    3. Mengisi data

      Ruang storan objek ialah gandaan integer 8 bait Jika pengepala objek + data tika kurang daripada gandaan integer 8 bait, ia akan diisi.

    Bercakap tentang saiz jenis rujukan, rujukan menduduki 4 bait dalam mesin maya 32-bit Jika pemampatan penunjuk tidak didayakan dalam mesin maya 64-bit, rujukan menduduki 8 bait.

    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;

    Menurut contoh, kita melihat bahawa testObjSize objek obj2 = null,

    saiz tertahan obj2 = saiz cetek obj2 = 24
    Obj1 objek testObjSize ialah obj2, jadi obj1s saiz cetek = obj1's; saiz + saiz dikekalkan obj2 = 48;

    Lampirkan timbunan di penghujung!

    Jika terdapat sebarang kesilapan, sila beritahu saya.

    balas
    0
  • Batalbalas