java基础1:对象创建内存分析

来源:互联网 发布:2007excel数据有效性 编辑:程序博客网 时间:2024/06/04 23:30

栈:

    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的内存图


   


原创粉丝点击