![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
JollyRoger0 |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.1.2016 Репутация: нет Всего: нет |
Доброго времени суток!
Предположим, есть у нас структуры
делаем:
Вопрос: сколько памяти израсходуется на aSameLink и bSameLink? Если одинаково - то понятно, ссылка и есть ссылка. А если нет - то в чём причина, и насколько отличается/сколько в каждом случае занимает памяти? Ведь мы не создаём новых аррайлистов при таком присваивании. Это на счёт памяти(если время в примере с a,b затрачивается разное, тоже любопытно почему). Теперь про время: есть структура
делаем:
ЛИБО делаем:
То есть, разница в том, что в (1) мы достаём элемент массива, потом достаём value, а потом уже то что надо, и так 2 раза,а в (2) мы достаём сначала один раз элемент и value, а потом то что надо. Вопрос: ускорит ли (2) работу программы, и насколько? Прекрасно осведомлён что на малом кол-ве итераций разница мизер, это неважно, их может стать много:) Реально вопросы возникли потому, что в программе нужно было использовать монструозную структуру (а), и я хз, сделать ли обьект-подструктуру из двух ArrayList<Pair<UnlockCondition, Upgrade>>, оставляя лишь ArrayList<Pair<String, SUBSTRUCTURE>> в обёртке, либо непосредственно со структурой (а). В первом случае планирую сделать что-то типа getFirstUnlockCondition и getFirstUpgrade методы, которые и будут делать x.get(y).getKey / getValue постоянно. Как вообще правильно делать структуры, для которых стандартные структуры вроде бы и подходят, но много уровней вложенности? Если таки свой класс - буду рад примерам. |
||||||||||
|
|||||||||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Генерики существуют только во время компиляции, в рантайме их нет. Поэтому для упрощения можно всю эту кашу из навернутых типов убрать и получится:
и ответ становится очевидным. aSameLink и bSameLink занимают 8-16 байт на стеке. Что касается второй части вопроса. Тут надо считать сколько занимает одна структура в случае А и сколько их будет всего и сколько занимает структура Б и сколько их будет. Но в принципе N полей распределенные по 2-м объектам будут занимать больше, чем те же N полей лежащих в одном объекте. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
JollyRoger0 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.1.2016 Репутация: нет Всего: нет |
Так и подозревал:) А во второй части меня не интересует память, понятно что чуть больше памяти так будет занято, но с2pair это одна переменная в итерации, так что память абсолютно не важна тут. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
В этом конкретном примере скорее всего разница будет в пределах статистической погрешности. Плюс JIT вполне может тут провести оптимизацию. В общем это преждевременная оптимизация.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |