Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Выделение памяти под массивы / 9 сообщений из 9, страница 1 из 1
28.02.2006, 00:13
    #33569341
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение памяти под массивы
любой массив объектов в Java хранит ссылки на объекты (какими они ни были эти объекты). отсюда следует что все проинициализированные массивы будут занимать одинаковый объем памяти? (разумеется учитывается только массив ссылок на объекты а не сами проинициализированные объекты):

Код: plaintext
1.
2.
3.
4.
5.
MyObject[] arr_1 = { new  MyObject( 1 ),  new  MyObject( 2 ), ...,  new  MyObject(n)}
File[] arr_2 =  new  File[n];
String[] arr_3 =  new  String[n];

для всех равных n

сколько байт занимает одна ссылка?
...
Рейтинг: 0 / 0
28.02.2006, 00:33
    #33569352
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение памяти под массивы
на win32 думаю 4
...
Рейтинг: 0 / 0
28.02.2006, 06:38
    #33569446
Liner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение памяти под массивы
unicornmirageлюбой массив объектов в Java хранит ссылки на объекты (какими они ни были эти объекты). отсюда следует что все проинициализированные массивы будут занимать одинаковый объем памяти? (разумеется учитывается только массив ссылок на объекты а не сами проинициализированные объекты):

Код: plaintext
1.
2.
3.
4.
5.
MyObject[] arr_1 = { new  MyObject( 1 ),  new  MyObject( 2 ), ...,  new  MyObject(n)}
File[] arr_2 =  new  File[n];
String[] arr_3 =  new  String[n];

для всех равных n

сколько байт занимает одна ссылка?

Может зависит от разрядности платформы где установлена виртуальная машина?
...
Рейтинг: 0 / 0
28.02.2006, 14:15
    #33570819
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение памяти под массивы
спасибо за ответы.
теперь отвечу почему я задал такой вопрос - например есть задача - где необходимо выделить своеобразный КЭШ для объектов произвольного типа. размер КЕШа заранее известен, также известен его максимально-возможный размер.. и в этом случае целесообразнее использовать заранее выделенный массив ссылок на объекты, чем использовать коллекции или списки, т.к. это будет работать гораздо быстрее?
...
Рейтинг: 0 / 0
28.02.2006, 15:00
    #33571031
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение памяти под массивы
ни думаю, что абгонит arrayList
...
Рейтинг: 0 / 0
28.02.2006, 15:57
    #33571289
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение памяти под массивы
Объекты в Java идентифицируются хэш-кодом (т. е. "ссылка" о которой Вы говорите - это хэш код объекта)
...
Рейтинг: 0 / 0
28.02.2006, 22:28
    #33572158
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение памяти под массивы
а хешкод - это число int, получается что 4 байта :)
...
Рейтинг: 0 / 0
02.03.2006, 13:04
    #33576700
grady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение памяти под массивы
Объекты в Java НЕ идентифицируются хешкодом.
Правило использования хешкода:если ссылки воззвращяют разный хешкод - они указывают на разные объекты. Все. Если один и тот же - никаких предположений не делается, делается попытка разрешить ссылку. Никто не запрещает везде возвращать например 1. Используется для оптимизации сравнения объектов, т.к. в случае сложной иерархии ссылок сравнение может быть дорогой операцией(надо пройти по всей цепочке, причем что еще хуже ссылки могут оказаться сетевыми или межпроцессными проксями).
Идея полностью заимствована из CORBA образца 1993г.
...
Рейтинг: 0 / 0
02.03.2006, 17:39
    #33577923
Выделение памяти под массивы
unicornmirageспасибо за ответы.
теперь отвечу почему я задал такой вопрос - например есть задача - где необходимо выделить своеобразный КЭШ для объектов произвольного типа. размер КЕШа заранее известен, также известен его максимально-возможный размер.. и в этом случае целесообразнее использовать заранее выделенный массив ссылок на объекты, чем использовать коллекции или списки, т.к. это будет работать гораздо быстрее?

Для реализации кеша стоит посмотреть на слабые ссылки:
Код: plaintext
1.
java.lang.ref.WeakReference
java.util.WeakHashMap

Можно ничего не смотреть, а взять готовую реализацию из апачевского проекта commons-collections:
Код: plaintext
org.apache.commons.collections.map.ReferenceMap
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Выделение памяти под массивы / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]