1.Java虚拟机的内存划分
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
区域名称 | 作用 |
---|---|
寄存器 | 给CPU使用,和我们开发无关。 |
本地方法栈 | JVM在使用操作系统功能的时候使用,和我们开发无关。 |
方法区 | 存储可以运行的class文件。 |
堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存。 |
方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。 |
或者可以这样具体一点:
2.数组在内存中的存储
2.1 一个数组内存图
public class Demo01ArrayOne {
public static void main(String[] args) {
int[] array = new int[3]; // 动态初始化
System.out.println(array); // 地址值
System.out.println(array[0]); // 0
System.out.println(array[1]); // 0
System.out.println(array[2]); // 0
System.out.println("==============");
// 改变数组当中元素的内容
array[1] = 10;
array[2] = 20;
System.out.println(array); // 地址值
System.out.println(array[0]); // 0
System.out.println(array[1]); // 10
System.out.println(array[2]); // 20
}
}
2.2 两个数组内存图
public class Demo02ArrayTwo {
public static void main(String[] args) {
int[] arrayA = new int[3];
System.out.println(arrayA); // 地址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 0
System.out.println(arrayA[2]); // 0
System.out.println("==============");
arrayA[1] = 10;
arrayA[2] = 20;
System.out.println(arrayA); // 地址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 10
System.out.println(arrayA[2]); // 20
System.out.println("==============");
int[] arrayB = new int[3];
System.out.println(arrayB); // 地址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 0
System.out.println(arrayB[2]); // 0
System.out.println("==============");
arrayB[1] = 100;
arrayB[2] = 200;
System.out.println(arrayB); // 地址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 100
System.out.println(arrayB[2]); // 200
}
}
两个数组各玩各的,互不影响
2.3 两个变量指向一个数组
public class Demo03ArraySame {
public static void main(String[] args) {
int[] arrayA = new int[3];
System.out.println(arrayA); // 地址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 0
System.out.println(arrayA[2]); // 0
System.out.println("==============");
arrayA[1] = 10;
arrayA[2] = 20;
System.out.println(arrayA); // 地址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 10
System.out.println(arrayA[2]); // 20
System.out.println("==============");
// 将arrayA数组的地址值,赋值给arrayB数组
int[] arrayB = arrayA;
System.out.println(arrayB); // 地址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 10
System.out.println(arrayB[2]); // 20
System.out.println("==============");
arrayB[1] = 100;
arrayB[2] = 200;
System.out.println(arrayB); // 地址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 100
System.out.println(arrayB[2]); // 200
}
}