Java内存分析二

来源:互联网 发布:数据库课程视频 编辑:程序博客网 时间:2024/04/29 20:12

这是本系列的第二篇博客,继续上一篇的内容我们继续分析。

类跟数组一样,都是属于引用类型,引用类型就是指一堆对内存可以同时被多个栈内存指向。下面来看一下引用传递的简单实例。

1对象的引用传递例1

class Person{      String name;      int age;      public void tell(){          System.out.println("姓名:"+name+",年龄:"+age);      }  }    public class Test03{      public static void main(String[] args) {          Person per1=new Person();          Person per2=per1;                    per1.name="张三";          per1.age=30;          per2.age=33;                    per1.tell();          per2.tell();  

程序运行结果为:

姓名:张三,年龄:33
姓名:张三,年龄:33

从程序的运行结果可以发现,两个对象输出的内容一样,实际上所谓的引用传递,就是将一个堆内存空间的使用权交个多个栈内存空间,每个栈内存空间都可以修改堆内存空间的内容,此程序的内存分配图如下所示:



2对象的引用传递例2

class Person{      String name;      int age;      public void tell(){          System.out.println("姓名:"+name+",年龄:"+age);      }  }    public class Test04 {      public static void main(String[] args) {          Person per1=new Person();          Person per2=new Person();            per1.name="张三";          per1.age=30;          per2.name="李四";          per2.age=33;          per2=per1;                    per1.tell();          per2.tell();      }  }  

上述程序运行结果为:

姓名:张三,年龄:30
姓名:张三,年龄:30

从程序的输出结果可以发现可Test03一样。不过内存分配发生了一些变化,具体如下所示:



注意点:

  1. Java本身提供垃圾收集机制(Garbage Collection,GC),会不定期施放不用的内存空间,只要对象不用了,就会等待GC释放空间,如上面堆内存中的name="李四";age=33。
  2. 一个栈内存只能指向一个对内存空间,如果要想再指向其他的堆内存空间,则必须先断开已有的指向才能分配新的指向。

java中常用的内存区域

在java中主要存在4块内存空间,这些内存的名称及作用如下:

  1. 栈内存空间:保存所有的对象名称(更准确地说是保存了引用的堆内存空间的地址)
  2. 堆内存空间:保存每个对象的具体属性内容。
  3. 全局数据区:保存static类型的属性。
  4. 全局代码区:保存所有的方法定义。
关于内存暂时先学习到这里


0 0
原创粉丝点击