1、对象头,分为MarkWord和KlassPoint。
MarkWord(标记字段):默认存储对象的HashCode,代替年龄和锁定标记位置信息。它会根据对象的状态重用自己的存储空间,也就是说,MarkWord中存储的数据会随着锁定标记位置的变化而变化。
KlassPoint(类型指针):对象指向其类元数据的指针,虚拟机通过该指针确定该对象属于哪一类。
2、实例数据。这部分主要是存储数据信息和父类信息。
3、对齐填充。因为虚拟机要求对象的起始地址是8字节的整数倍,所以填充数据不一定存在,只是为了字节对齐。
一个空对象占8个字节,是因为对齐填充的关系,不到8个字节对齐填充会帮助我们自动完成。
实例
publicclassTestStudent{ publicstaticvoidmain(String[]args){ intn=10;//栈存储 intm=10;//栈存储 Studentstu=newStudent(); //属性赋值 stu.name="张三"; System.out.println(stu.name);//null张三 System.out.println(stu.age);//0 //调用 Stringname="ls";//局部变量(常量池) Stringaaaa="ls"; Stringpwd="123"; stu.login(name,pwd); System.out.println("name:"+name);//ls System.out.println("执行"); } } classStudent{ //属性 Stringname; intage; //用户登录 //StringuserName; //Stringpwd; publicvoidlogin(StringuserName,Stringpwd){ System.out.println(userName+"===="+pwd);//ls123 } publicvoidshow(){ System.out.println("姓名:"+name+",年龄:"+age); } }
以上就是Java对象在内存中的结构,希望对大家有所帮助。更多Java学习指路:Java基础
原文来自:https://www.py.cn© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容