JVM 内存结构
- JVM运行时内存区域结构
JMM(Java Memory Model)
Java 对象模型
- HotSpot (OOP - klass model)
-
变量在内存中的存储
- 当创建变量时需要在内存中申请空间
- 内存系统根据变量类型来分配存储空间,分配的空间只能用于存储该类型的数据
- 基本类型:存储在栈区,直接存储值
- 引用类型:对象存储在heap区,栈区存储真实对象的地址引用
-
过程演示:
public static void main(String[] args) {
User user = new User();
System.out.println(user.id); // 0
System.out.println(user.name); // null
System.out.println(user); // User@1b6d3586
user.id = 1;
user.name = "Java";
System.out.println(user.id); // 1
System.out.println(user.name); // "Java"
System.out.println(user); // User@1b6d3586 值变了,地址不变
user.sayHello();
user.login();
}
- 两个对象指向同一个地址:
public static void main(String[] args) {
User user2 = new User();
user2.id = 2;
user2.name = "xx";
System.out.println(user2.id);
System.out.println(user2.name);
User user3 = user2;
user3.id = 3;
user3.name = "ivan";
System.out.println(user3.id);
System.out.println(user3.name);
System.out.println(user2.id);
System.out.println(user2.name);
}
this
- 构造器中
this指向正要初始化的对象地址 - 普通方法中
this指向调用该方法的对象地址 this不能用在出现static的地方this():调用构造方法,必须在第一行