Java对象在内存中的结构是什么
作者:WeekendLife
时间:2023-04-29
浏览:2
1、对象头,分为MarkWord和KlassPoint。MarkWord(标记字段):默认存储对象的HashCode,代替年龄和锁定标记位置信息。它会根据对象的状态重用自己的存储空间,也就是说,MarkWord中存储的数据会随着锁定标记位置的变化而变化。KlassPoint(类型指针):对象指向其类元数据的指针,虚拟机通过该指针确定该对象属于哪一类。2、实例数据。这部分主要是存储数据信息和父类信息。3、对齐填充。因为虚拟机要求对象的起始地址是8字节的整数倍,所以填充数据不一定存在,只是为了字节对齐。一个空
本文目录
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);
}
}
作者最新文章
process lasso怎么关闭开机自动启动
2026-11-01 09:22
红白网站AO3怎么访问?解密使用指南
2026-10-30 11:06
线上PDF转Word怎么操作?如何在线转换PDF为Word?
2026-10-29 15:04
EK by LM TEK 推出 RTX 5070Ti/5080 显卡亚克力水冷头,适配华硕 TUF
2026-10-27 11:04
PS快捷键完整版有哪些
2026-10-27 08:11
上一篇:
Java中如何声明变量
下一篇:
Java怎么实现简易购物系统
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多

































