Какой объект создан в какой части памяти? - PullRequest
0 голосов
/ 13 сентября 2009
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 ]

4 голосов
/ 13 сентября 2009

Поскольку вы пометили свой вопрос Java, я предполагаю, что вы имели в виду Java. Прямо изо рта лошади:

Виртуальная машина Java имеет кучу, которая является общей для всей Java потоки виртуальной машины. Куча есть область данных времени выполнения, из которой память для всех экземпляров классов и массивы выделяется.

JVM Spec

Вот ссылка на предыдущий вопрос SO, в котором подробно рассматривается это (и это не зависящее от языка обсуждение темы).

Вот ссылка на статью из C # corner, подробно описывающую проблему в C #.

1 голос
/ 13 сентября 2009

Заказ и Клиент находятся в куче. Хотя Customer может быть структурой, он является составным членом ссылочного типа (например, класса).

Все строки являются ссылочными типами и создаются в куче.

Я не уверен насчет класса Ship, потому что у меня нет его объявления (т.е. я не знаю, является ли он структурой или классом).

В стеке создается переменная int iTotal.

Это верно для C #. В Java могут действовать разные правила.

...