java基础1:对象创建内存分析
栈:
1. 每个线程私有,不能实现线程间的共享!
2. 局部变量放置于栈中。
3. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!
堆:
1. 放置new出来的对象!
2. 堆是一个不连续的内存空间,分配灵活,速度慢!
方法区(也是堆):
1. 被所有线程共享!
2. 用来存放程序中永远是不变或唯一的内容。(类代码信息、静态变量、字符串常量)
运行以下代码
public class Test1 {
public static void main(String[] args) {
//通过类加载器Class Loader加载Student类。 加载后,在方法区中就有了Student类的信息!
Student s1 = new Student();
s1.name = "高琪";
s1.study();
s1.sayHello("馬士兵");
Student s2 = new Student();
s2.age = 18;
s2.name="老高";
}
}
内存分析图
拓展:假设每个学生有一个电脑
public class Student {
//静态的数据
String name;
int id; //学号
int age;
String gender;
int weight;
Computer computer;
Student s1 = new Student();
s1.computer = c; //实际是将c的地址34343434 给了 s1的computer属性,可以直接指向堆中的computer实例,使 其拥有了电脑
对象和this的内存图