在哪个部分内存中创建了哪个对象?

时间:2009-09-13 07:45:37

标签: c# java stack heap

public class Order
{
    static Customer cust = new Customer();
    string sEmpty = "";

    public static void main(String args[])
    {
        int iTotal = 10;
        string sProductName = "Salt";
        Ship shp = new Ship();
    }
}

在上面的代码中,哪个对象和引用是在内存的哪一部分创建的? (我的意思是堆和堆栈)

alt text
(来源:c-sharpcorner.com

2 个答案:

答案 0 :(得分:4)

由于您标记了Java问题,我认为您的意思是Java。直接从马的嘴里出来:

  

Java虚拟机有一个在所有Java之间共享的堆   虚拟机线程。堆是   运行时数据区域   所有类实例的内存和   数组已分配。

JVM Spec

以下是对前一个SO问题的link,这个问题非常详细(并且是关于该主题的语言无关的讨论)。

这是来自C#角落的文章的link,详细说明了C#中的问题。

答案 1 :(得分:1)

订单和客户在堆上。虽然Customer可以是结构,但它是引用类型(例如,类)的组合成员。

所有字符串都是引用类型,并在堆上创建。

我不确定Ship类,因为我没有声明(即,我不知道它是结构还是类)。

int iTotal变量在堆栈上创建。

C#也是如此。 Java可能有不同的规则在起作用。