标签:
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);
Cell[] cells = new Cell[]{ new Cell(1,2), new Cell(2,3), new Cell(3,4), new Cell(4,5) };
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
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中没有二维数组的概念)
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u011637069/article/details/47428723