li

XXXXX

 

面向对象--引用类型数据及对象内存管理

三、数组

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 System.gc()方法

  • GC线程不会刚发现无用对象就会回收,如果需要强制回收,则使用System.gc()方法;

  • 这个方法强制调度GC线程回收无用对象。

2、栈

2.1 栈存放方法中的局部变量

 

 2.2 局部变量的生命周期

  • 声明周期:栈帧被创建开始--方法执行完毕栈帧被销毁结束,局部变量也随之销毁;
  • 栈帧中存储的是:局部变量和参数等。

 

 2.3 局部变量和成员变量的区别:

成员变量:

  • 定义在类外,方法外;
  • 有默认初始值,可以不显式初始化;
  • 所在类被实例化之后,存在堆中,对象被回收时,成员变量失效;

局部变量:

  • 定义在方法外;
  • 没有默认值,必须自行设定初始值;
  • 方法被调用时,存在栈中,方法调用结束,从栈中清除。

3、方法区

3.1 存放类的信息

  • java在运行时,会通过类加载器载入类文件的字节码信息,解析后放在方法区中。

3.2 方法只有一份

  • 当类的信息加载到方法区时,类中的类方法也被加载在方法区中;
  • 无论创建多少对象,所有的对象是公用方法区中一个方法的定义。

 

 

 

posted on 2022-03-19 19:55  LXXXXxZz  阅读(66)  评论(0编辑  收藏  举报

导航