
1、对象头,分为MarkWord和KlassPoint。
MarkWord(标记字段):默认存储对象的HashCode,代替年龄和锁定标记位置信息。它会根据对象的状态重用自己的存储空间,也就是说,MarkWord中存储的数据会随着锁定标记位置的变化而变化。
KlassPoint(类型指针):对象指向其类元数据的指针,虚拟机通过该指针确定该对象属于哪一类。
2、实例数据。这部分主要是存储数据信息和父类信息。
3、对齐填充。因为虚拟机要求对象的起始地址是8字节的整数倍,所以填充数据不一定存在,只是为了字节对齐。
一个空对象占8个字节,是因为对齐填充的关系,不到8个字节对齐填充会帮助我们自动完成。
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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);
System.out.println(stu.age);
String name = "ls" ;
String aaaa= "ls" ;
String pwd = "123" ;
stu.login(name,pwd);
System.out.println( "name:" +name);
System.out.println( "执行" );
}
}
class Student {
String name;
int age;
public void login(String userName,String pwd){
System.out.println(userName+ "====" +pwd);
}
public void show() {
System.out.println( "姓名:" + name + ",年龄:" + age);
}
}
|
以上就是Java对象在内存中的结构,希望对大家有所帮助。更多Java学习指路:Java基础
本教程操作环境:windows7系统、java10版,DELL G3电脑。