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中没有二维数组的概念)