635
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基础
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)