【问题标题】:java dynamic memory allocation?java动态内存分配?
【发布时间】:2010-03-28 11:51:56
【问题描述】:

为什么使用new 关键字进行对象初始化称为动态内存分配,因为编译时本身我们需要知道该对象所需的内存。

另外请解释当您在 heapstack 中执行 ClassA object = new ClassA(); 时会发生什么。

【问题讨论】:

    标签: java memory-management instantiation


    【解决方案1】:

    所有 Java 对象是动态分配的。你总是传递对它们的引用。这就是语言的设计方式。当你这样做时:

    ClassA obj = new ClassA();
    

    然后在堆上分配对象,并将对它的引用存储在堆栈中(当然,假设它在方法内部)。这意味着您可以随时传递对象而不必担心它们的存储位置。

    【讨论】:

    • 为什么对象存放在Heap中,而引用存放在Stack中?
    • 栈保存方法调用的局部变量。在这里,我假设obj 变量在方法调用中,所以显然对对象的引用在堆栈上。与整个程序中的所有其他 Java 对象一样,对象本身位于堆上。甚至类都在堆上(尽管 JIT 编译器可能会在幕后做一些额外的技巧)。
    【解决方案2】:

    它是动态的,因为您不知道何时它需要分配 - 您按需分配。

    还请注意,您知道该对象需要多少内存,但不知道该对象的成员需要多少。这可能只能在运行时确定(例如,可变大小的数组)。

    【讨论】:

      【解决方案3】:

      如果你有一个 JMath 类并且你想在运行时获取它的所有对象(动态分配)那么你就写了

      ArrayList<JMath> J = new ArrayList<JMath> ();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 2013-07-01
        相关资源
        最近更新 更多