1. 程式人生 > 其它 >物件在記憶體中的儲存佈局

物件在記憶體中的儲存佈局

 

程式碼實現:

package com.zzk;

import org.openjdk.jol.info.ClassLayout;

public class JustTest {
    private static class T{
        int a;
        boolean m;
        String s = "hello world";
    }

    public static void main(String[] args) {
        T t = new T();
        System.out.println(ClassLayout.parseInstance(t).toPrintable());
        
/*synchronized (t) { System.out.println(ClassLayout.parseInstance(t).toPrintable()); }*/ System.out.println(ClassLayout.parseInstance("hello world").toPrintable()); } }

輸出結果:

結果顯示t物件佔用24個位元組,其中物件頭佔用了12個位元組,例項資料佔用了4+1=5個位元組,由於需要被8整除,所以補3個位元組。

最後儲存在String中的只是Byte陣列的引用地址,所以4位元組就夠了。

鎖住物件的時候,有什麼變化呢

        T t = new T();
        System.out.println(ClassLayout.parseInstance(t).toPrintable());
        synchronized (t) {
            System.out.println(ClassLayout.parseInstance(t).toPrintable());
        }

 

 顯然,鎖住物件就是在markword裡面做了手腳