内存的划分 & 程序代码运行时内存工作流程

内存的划分:
  1,寄存器。
  2,本地方法区。
  3,方法区。
  4,栈内存。
    存储的都是局部变量。
    而且变量所属的作用域一旦结束,该变量就自动释放。

  5,堆内存。
    存储是数组和对象(其实数组就是对象) ,凡是new建立的都在堆中。
    特点:
    1)每一个实体都有首地址值。
    2)堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同。整数是0,小数0.0或者0.0f,boolean类型是false,char类型是 ‘\u0000‘,引用数据类型是NULL
    3)垃圾回收机制。

全局变量和局部变量的区别:

  局部变量是定义在方法内的变量,在其作用域结束时被释放;

  全局变量是定义在方法外的变量。

程序代码运行时内存工作流程演示:

  演示代码:

 1 class  Demo2
 2 {
 3     public static void main(String[] args)
 4     {
 5         int[] arr = new int[3];
 6         arr[2] = 5;
 7         System.out.print(arr[2]);
 8
 9     }
10 }

  演示图解:

  文字说明:

    1)在栈内存中为main函数开辟一个内存空间;

    2)在main的内存空间为局部变量arr开辟一个内存空间;

    3)在堆内存中开辟一个内存空间存放实体数组,数组自动初始化;

    4)将堆内存中开辟的数组首地址传给栈内存中的局部变量arr;

    5)arr[2]的值修改;

    6)控制台上打印arr[2]的值。

  tips:

    1)数组的确定必须明确其长度;

    2)堆内存中的实体会自动初始化,而栈内存中不会,并且栈中未初始化会在编译时报错;

    3)堆内存中开辟给数组的空间首地址传给栈内存的数组名变量,数组名变量保存值为 [[email protected]哈希值 ;( [ 表示引用指向数组,I 表示引用指向数组为int型,@之后是哈希值,通过哈希值计算得出引用在堆内存中的首地址)

  数组代码常见异常:

    1)ArrayIndexOutOfBoundsException:(此异常在编译时通过,在运行时报错)

      当访问到数组中不存在的角标时,就会发生该异常。

    2)NullPointerException:(此异常在编译时通过,在运行时报错)

      当引用型变量没有任何实体指向时,还在用其操作实体,就会发生该异常。

  

时间: 10-20