Appearance
内存是计算机中的重要原件,临时存储区域,作用是运行程序。
我们编写的程序是存放在硬盘中的,硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。
Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
**Java****虚拟机的内存划分**
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
`**JVM****的内存划分:**`
|
|
**区域名称**
**作用**
寄存器
给CPU使用,和我们开发无关。
本地方法栈
JVM在使用操作系统功能的时候使用,和我们开发无关。
方法区
存储可以运行的class文件。
堆内存
存储对象或者数组,new来创建的,都存储在堆内存。
方法栈
方法运行时使用的内存,比如main方法运行,进入方法栈中执行。
**数组在内存中的存储**
**一个数组内存图**
public static void main(String[] args) \{
int[] arr = new int[3];
System.out.println(arr);//[I@5f150435
\}
以上方法执行,输出的结果是`[I@5f150435`,这个是什么呢?是数组在内存中的地址。`new`出来的内容,都是在堆内存中存储的,而方法中的变量`arr`保存的是数组的地址。
**输出**`arr[0]`**,就会输出**`arr`**保存的内存地址中数组中**`0`**索引上的元素**
**两个数组内存图**
public static void main(String[] args) \{
int[] arr = new int[3];
int[] arr2 = new int[2];
System.out.println(arr);
System.out.println(arr2);
\}
**两个变量指向一个数组**
public static void main(String[] args) \{
//
定义数组,存储`3`个元素
int[] arr = new int[3];
//
数组索引进行赋值
arr[0] = 5; arr[1] = 6; arr[2] = 7;
//
输出`3`个索引上的元素值
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//
定义数组变量`arr2`,将`arr`的地址赋值给
arr2
int[] arr2 = arr; arr2[1] = 9;
System.out.println(arr[1]);
\}