JVM之栈和堆

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/swjtu2014112194/article/details/85112276

栈:存放基本数据类型和对象的引用变量。

堆:存放对象。

堆主要是用来存放对象的,栈主要是用来执行程序的。相较于堆,栈的存取速度更快,但栈的大小和生存期必须是确定的,因此缺乏一定的灵活性。而堆却可以在运行时动态的分配内存,生存期不用提前告诉编译器,这也导致了其存取速度的缓慢。

堆和栈的存取如下例所示:

class Rectangle{
    private int width;
    private int length;
    public Rectangle(int width, int length){
        this.width = width;
        this.length = length;
    }
}

public class Test{
    public static void main(String[] args){
        int i = 9;
        Rectangle r = new Rectangle(3, 5);
    }
}

在上述程序进入main()方法后,数据的存储关系如图4-11所示:
在这里插入图片描述
由于i为基本数据类型的局部变量,因此它存储在栈空间,而r是对象的引用变量,因此也被存储在栈空间中;实际的对象存储在堆空间中,当main()方法退出后,存储在栈中的i和r通过压栈和弹栈操作将会在栈中被回收,而存储在堆中的对象将会由垃圾回收器来自动回收。

猜你喜欢

转载自blog.csdn.net/swjtu2014112194/article/details/85112276