【问题标题】:Integer and Integer Array storage on stack/heap堆栈/堆上的整数和整数数组存储
【发布时间】:2014-05-31 09:23:58
【问题描述】:

我很想知道整数和整数数组是如何存储在 java 中的堆栈/堆中的,有人可以指出我的链接吗?或者谁能​​给我解释一下。

更新 1: 以及这如何影响整数和整数数组作为参数传递给 Java 中的方法的方式。

谢谢

【问题讨论】:

    标签: java integer heap-memory stack-memory


    【解决方案1】:

    每当您在本地范围(方法)内声明变量时,它都会被放入堆栈。

    即:Type myVariable 会将新变量的空间推送到该方法堆栈框架上,但由于未初始化,因此尚不可用。

    当您为变量赋值时,该值将被放入堆栈的保留空间中。

    现在是棘手的部分。如果类型是原始类型,则该值包含您分配的值。例如,int a = 55 会将值 55 放入该空格。
    但是,如果类型是非原始类型,即 Object 的某个子类,则放入堆栈的值实际上是一个内存地址。此内存地址指向堆上的一个位置,即存储实际对象的位置。

    对象在创建时被放入堆中。

    一个例子

    private void myMethod()
    {
        Object myObject = new Object();
    }
    

    我们声明了一个变量,所以我们在堆栈帧上获得了空间。类型是一个对象,所以这个值将是一个指针,指向创建对象时分配的堆空间。

    【讨论】:

      【解决方案2】:

      方法变量存储在堆栈中。另一方面,对象存储在堆中,如下图所示。 这就是为什么如果你得到 StackOverFlowException,这意味着你在一个方法中声明了太多的变量,或者你在递归调用中调用了太多的方法。如果你得到 Java 堆空间错误,这意味着你创建的对象比你做的多。 Stack和Heap的解释,我推荐this link

      【讨论】:

        【解决方案3】:

        变量只包含对这个对象的引用,如果是局部变量,这个引用存储在堆栈中,但对象的数据指向存储在堆中。

        您可以在此处阅读更多信息,例如:link

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-30
          • 2019-07-24
          • 2019-05-09
          • 2017-11-08
          • 2013-12-04
          • 2021-06-19
          相关资源
          最近更新 更多