面向对象--引用类型数据及对象内存管理
三、数组
1、引用类型数组:
1.1 数组是对象
- 数组是引用数据类型;
- 数组对象在堆中创建,声明的变量是引用类型,引用存储的是数组对象的地址值,指向数组对象;
- 可以将数组中的元素看成对象的成员变量,只不过类型完全一致而已。
1.2 引用类型数组的声明
- 数组的元素可以为任意类型,当然也可以为引用类型;
- 引用类型数组元素存储的不是对象本身,而是存储元素对象的引用。
public class Cell { int row; int col; public Cell(int col,int row) { this.col = col; this.row = row; } } public class TestCell { public static void main(String[] args) { Cell[] cells = new Cell[3];// cells[0] = new Cell(1,2); cells[1] = new Cell(1,2); cells[2] = new Cell(1,2); System.out.println(Arrays.toString(cells)); } }
1.3 数组的初始化(重点)
- 数组元素的默认值为null;
- 如果希望每个元素都指向具体的对象,则需要对每个元素都使用new创建实例。
1.4 数组的元素是基本类型数组
- 数组的元素可以为任意类型,当然也可以为基本类型数组--二维数组
public class Cell { int row; int col; public Cell(int col,int row) { this.col = col; this.row = row; } } public class TestCell { public static void main(String[] args) { Cell[] cells = new Cell[3];// cells[0] = new Cell(1,2); cells[1] = new Cell(1,2); cells[2] = new Cell(1,2); System.out.println(Arrays.toString(cells)); } }
四、对象内存管理(重点)
1、堆内存
1.1 对象存储在堆中
- JVM分为三个区域:堆(heap)、栈(stack)、方法区(method);
- JVM为java程序提供并管理所需要的内存空间;
- 堆中存储使用new关键字创建的对象---数组、String、Person等。
1.2 成员变量的生命周期
- 当一个引用值为null时,该对象没有任何引用指向,则该对象被设为废弃对象,属于被回收范围;
- 成员变量的生命周期:从对象在堆中创建,到对象从堆中被回收为止;
1.3 垃圾回收机制
- 垃圾回收器(Garbage Collection ,GC),是JVM自带的一个线程(自动运行的),用于回收没有任何引用指向的对象;
- 垃圾回收器会自动帮java程序员处理垃圾。
1.4 内存泄漏
- 内存泄漏:不再使用的对象没有被及时回收,积攒过多导致程序崩溃。
1.5
-
- 这个方法强制调度GC线程回收无用对象。
2、栈
2.1 栈存放方法中的局部变量
2.2 局部变量的生命周期
- 声明周期:栈帧被创建开始--方法执行完毕栈帧被销毁结束,局部变量也随之销毁;
- 栈帧中存储的是:局部变量和参数等。
2.3 局部变量和成员变量的区别:
成员变量:
- 定义在类外,方法外;
- 有默认初始值,可以不显式初始化;
- 所在类被实例化之后,存在堆中,对象被回收时,成员变量失效;
局部变量:
- 定义在方法外;
- 没有默认值,必须自行设定初始值;
- 方法被调用时,存在栈中,方法调用结束,从栈中清除。
3、方法区
3.1 存放类的信息
- java在运行时,会通过类加载器载入类文件的字节码信息,解析后放在方法区中。
3.2 方法只有一份
- 当类的信息加载到方法区时,类中的类方法也被加载在方法区中;
- 无论创建多少对象,所有的对象是公用方法区中一个方法的定义。
本文来自博客园,作者:LXXXXxZz,转载请注明原文链接:https://www.cnblogs.com/l11111/p/16027730.html