oop_day03_内存管理、引用类型数组

oop_day03_内存管理、引用类型数组

--20150811


1.内存管理:由JVM来分配并管理------了解为主

   1)堆:

      1.1)用于存储new出来的对象(包括成员变量)

      1.2)成员变量的生命周期:

                创建对象时存在,对象被回收时消失

      1.3)垃圾回收器(GC)用于回收没有任何引用指向的对象

      1.4)GC不定期回收,而回收的过程中透明的

           若想快一些,调用System.gc()

      1.5)内存泄露:不再使用的对象没有被及时的回收

            建议:不再使用的对象将其引用及时的设置为null

     

      内存图:


   2)栈:

      2.1)用于存储所有的局部变量

      2.2)局部变量的生命周期:

                方法被调用时存在,方法执行结束后消失

      2.3)调用方法时,在栈中为该方法分配对应的栈桢,

            栈桢中包含方法中所有的局部变量(参数+变量),

            方法执行结束后,栈桢被清除,局部变量随之消失

  

     内存图:


   3)方法区:

      3.1)用于存储.class字节码文件以及方法

      3.2)方法只有一份,存在方法区中,

            通过this来区分不同的对象


      内存图:



2.引用类型数组

   1)

      Cell[] cells = new Cell[4];   //创建Cell数组对象

      cells[0] = new Cell(1,2);  //创建Cell对象

      cells[1] = new Cell(2,3);

      cells[2] = new Cell(3,4);
      cells[3] = new Cell(4,5);

2)
     Cell[] cells = new Cell[]{
     new Cell(1,2),
     new Cell(2,3),
     new Cell(3,4),
     new Cell(4,5)
      };

3)
      int[][] arr = new int[3][];
      arr[0] = new int[2];
      arr[1] = new int[3];
      arr[2] = new int[2];
      arr[1][0]=100; //将arr中第2个元素中的第1个元素赋值为100

4)
      int[][] arr = new int[3][4]; //arr包含3个元素,每个元素又包含4个元素
      for(int i=0;i<arr.length;i++){
          for(int j=0;j<arr[i].length;j++){
              arr[i][j] = 100; //将每个元素都赋值为100
          }
      }

   内存图:


代码示例:

package oo.day03;
//引用类型数组演示
public class RefArrayDemo {
	public static void main(String[] args) {
		
		/*
		//1.
		Cell[] cells = new Cell[4];
		cells[0] = new Cell(1,2);
		cells[1] = new Cell(2,3);
		cells[2] = new Cell(3,4);
		cells[3] = new Cell(4,5);
		*/
		/*
		//2.
		Cell[] cells = new Cell[]{
			new Cell(1,2),
			new Cell(2,3),
			new Cell(3,4),
			new Cell(4,5)
		};
		*/
		/*
		//3.
		int[][] arr = new int[3][];
		arr[0] = new int[2];
		arr[1] = new int[3];
		arr[2] = new int[2];
		arr[1][0] = 100;
		*/
		/*
		//4.
		int[][] arr = new int[3][4];
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[i].length;j++){
				arr[i][j] = 100;
			}
		}
		*/
		
	}
}





---------------------------------------------------------------------------------------------


总结:

    内存图可以有助于理解,还是有必要好好看看的,具体见文中图示

    数组是一种引用类型,可以有数组类型的数组(C语言中称二维数组,java中没有二维数组的概念)






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值