1、物件頭,分為MarkWord和KlassPoint。
MarkWord(標記欄位):預設儲存物件的HashCode,取代年齡和鎖定標記位置資訊。它會根據物件的狀態重複使用自己的儲存空間,也就是說,MarkWord中儲存的資料會隨著鎖定標記位置的變化而改變。
KlassPoint(類型指針):物件指向其類別元資料的指針,虛擬機器透過該指針確定該物件屬於哪一類。
2、實例資料。這部分主要是儲存資料資訊和父類資訊。
3、對齊填滿。因為虛擬機器要求物件的起始位址是8位元組的整數倍,所以填充資料不一定存在,只是為了位元組對齊。
一個空物件佔8個位元組,是因為對齊填滿的關係,不到8個位元組對齊填滿會幫助我們自動完成。
實例
public class TestStudent { public static void main(String[] args) { int n = 10; //栈存储 int m = 10; //栈存储 Student stu = new Student(); //属性赋值 stu.name="张三"; System.out.println(stu.name); //null 张三 System.out.println(stu.age); //0 //调用 String name = "ls"; //局部变量(常量池) String aaaa="ls"; String pwd = "123"; stu.login(name,pwd); System.out.println("name:"+name); //ls System.out.println("执行"); } } class Student { // 属性 String name; int age; //用户登录 // String userName; // String pwd; public void login(String userName,String pwd){ System.out.println(userName+"===="+pwd); //ls 123 } public void show() { System.out.println("姓名:" + name + ",年龄:" + age); } }
以上是Java物件在記憶體中的結構是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!