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); //lssystem.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对象在内存中的结构是什么的详细内容。