1.JVM内存管理机制
在了解栈和堆之前,先通过下图的逻辑图对JVM内存管理机制有一个大概的概念。
2.堆和栈的区别
我们可以通过以下几个方面来区分
栈 | 堆 | |
---|---|---|
存储区别 | 运行方法,存储局部变量 | 存储对象实例 |
默认值 | 没有默认值,使用变量需要手动赋值 | 有默认值,可以直接引用 |
生命周期 | 使用完成后,立即释放,更新速度快,所以生命周期相对较短 | 等待JVM垃圾回收机制不定时回收 |
存储速度 | 程序运行中,都是基本数据类型或者引用,存取速度快 | 程序运行起来之后,动态分配内存,存取速度慢 |
线程 | 一个线程对应一个栈,线程私有 | 所有的线程对应一个堆,线程共享 |
内存大小 | 小 | 大 |
实例讲解
public static void main(String[] args) {
int []arr = new int[3];
System.out.println(arr);//[I@1b6d3586
for (int i = 0; i < arr.length; i++) {
int i1 = arr[i];
System.out.println(i1); //0,0,0
}
arr[1] = 5;
System.out.println(arr); //[I@1b6d3586
for (int i = 0; i < arr.length; i++) {
int i1 = arr[i];
System.out.println(i1); //0,5,0
}
}