堆和栈的浅薄认识

    xiaoxiao2021-03-25  62

    java程序运行后,jvm会有一个堆内存,也可以叫做主空间,线程会有一个栈内存,也可以叫做工作空间。

    这两个空间各自主要存放什么?为什么有了堆又有栈?

    咱们首先看看下面的代码:

    int[] arr ;//执行图1 arr = new int[3];//执行图2 for(int i=0;i<a.length;i++) arr[i] = i+5;//执行图三上面的代码在堆和栈中是如何分配空间的呢?请看下面三张图

    图1:

    int[] arr 图2 : arr = new int[3];

    图3:

    通过以上的代码和图分析分析:  arr是引用变量,存放于栈内,

    实际的数组元素存放在堆里,如果想访问堆内的数组元素,程序只能通过arr[下标]来去访问,也就是只能通过栈里的变量访问其所指向的堆内的元素。

    我们前面说了栈是属于线程的空间,当此线程执行完,那么这个栈也就销毁了,而堆里的不会消失,但假使堆里这个对象没有任何栈的引用指向它,那么我们传说的JVM就会在合适的时机把他当垃圾一样回收。

    这样说,你懂得为什么要有堆还有栈了吧?什么?还是不懂?

    简单的说就是创建一个对象需要的成本很高,我们把他放在堆里,栈的变量可以对此对象多次利用(因为可以有多个变量指向同一个对象),那么就大大提高了效率啊

    转载请注明原文地址: https://ju.6miu.com/read-37166.html

    最新回复(0)