Многократные ссылки Java удваивают используемую память?

1

Недавно я узнал, как создавать несколько ссылок на один и тот же изменяемый объект в Java, который я использую в составном списке моего создания. Мой вопрос: удваиваю ли я использование памяти или просто использую дополнительный int в качестве адреса памяти? Вот код, к которому я специально обращаюсь:

//This is my object containing a 64bit long
public class LongWrapper
{
    long data;
    LongWrapper(int data_in)
    {
        data = data_in;
    }
    public long getData()
    {
        return data;
    }
    public void setData(long data_in)
    {
        data = data_in;
    }
}

//This is my driver program containing references a & b
public class PointerTest 
{
    public static void main(String[] args) 
    {
        LongWrapper a = new LongWrapper(6);
        LongWrapper b = a;
        System.out.println("a = " + a.getData() + " b = " + b.getData());
        a.setData(7);
        System.out.println("a = " + a.getData() + " b = " + b.getData());
    }
}

This is my output:
a = 6 b = 6
a = 7 b = 7

Таким образом, в этом случае то, что я думаю, происходит в памяти, состоит в том, что у меня есть 2 ссылки, которые являются 32-битными адресами памяти, и один объект, содержащий мои 64-битные длины; это точно?

Я прошу, потому что я хочу использовать гораздо большие объекты, и это позволит мне иметь их в нескольких списках, в то же время минимизируя использование моей памяти.

Теги:
memory
reference

3 ответа

1
Лучший ответ

Таким образом, в этом случае то, что я думаю, происходит в памяти, состоит в том, что у меня есть 2 ссылки, которые являются 32-битными адресами памяти, и один объект, содержащий мои 64-битные длины; это точно?

У вас есть один объект и две ссылки a и b для ссылки на этот объект. Этот объект имеет длинные data.

Вы можете изменить/запросить состояние этого объекта, используя как ссылки a и b.

  • 0
    ... и поэтому у вас есть одна long data , так как у вас есть один объект.
  • 1
    Спасибо, ваш ответ на вопрос, что мне нужно. Я буду поддерживать голосование, когда мой представитель поднят.
1

Ты прав. Однако, если ваш код работает в 64-битной архитектуре, ссылки составляют 64 бита вместо 32 бит.

  • 0
    Вау, спасибо за быстрый ответ. Я буду поддерживать голосование, когда мой представитель поднят. Заметка на 64-битном адресе очень полезна и именно то, что мне нужно.
1

Вы определенно не удваиваете использование вашей памяти. вы можете создать столько ссылок, сколько хотите, указывая на один и тот же объект. Ссылки помещаются в стек и один объект в куче. Объект занимает больше места, чем 64 бит, потому что это только память, выделенная для его поля

  • 0
    Спасибо за вышеупомянутые и последующие заметки; Я многому учусь на этом сайте, и я ценю это. Я буду голосовать, когда мне позволят.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню