![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
serghd |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Смысл в том, чтобы забить list 75к массивами.
Делал цикл на 75000 итераций:
JVM вылетает, как я понимаю из-за нехватки памяти. Пробовал также создать массив вне цикла:
Но в этом случае, поскольку массив содержит только ссылки на объекты, в list сохранится 75к массивов только со значениями последней итерации (изменение элементов массива отразится также на всех массивах list'a). Код максимально упростил, чтобы оставить только суть, на самом деле парсится xml. Спасибо. Это сообщение отредактировал(а) serghd - 28.1.2010, 16:45 |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
И в чем вопрос-то? Увеличь память, или перейди на два листа.
Добавлено через 1 минуту и 4 секунды Или даже 2 массива. -------------------- 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. |
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
так увеличивал, такая же проблема как в последнем посте тут. Не помогает это
Это сообщение отредактировал(а) serghd - 28.1.2010, 17:28 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Или переходи на 64 битную JVM или на два листа.
-------------------- 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. |
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
>>Или переходи на 64 битную JVM как, можно по-подробнее? >>или на два листа а что, два ArrayList'a занимают меньше чем один большой? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ставишь 64-х битную ОС, а на нее 64-х битную JVM ![]() Два ArrayList-а занимают места меньше чем один ArrayList и 75000 массивов String[]. -------------------- 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. |
|||
|
||||
andrew_121 |
|
||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: нет Всего: 33 |
LSD, простите что я в чужую тему вклиниваюсь, просто любопытно стало.
несколько вопросов. для начала код:
вылетает на 88256 элементов. 1. если по умолчанию ВМ выделяет 64мб памяти, и этой памяти не хватает для 100к элементов, а только для 88256, полагаю, что в обработчике исключения нужно выделить еще памяти. 2. как в коде(не с помощью ключей) ее выделить? 3. как можно узнать объем объекта(не выделенной памяти)? в с++ есть оператор sizeof(). 4. равноправно ли правило, что строка состоящая из 10-ти символов занимает 10 байт памяти ВМ? спасибо. Добавлено через 42 секунды
поясните пожалуйста. почему так? -------------------- Удалил аккаунт. Прощайте! |
||||
|
|||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
||||
|
||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Тут все не так просто ![]() Никак.
Честно - нет. А так создают много одинаковых объектов и смотрят, сколько они занимают места. Еще есть извраты через unsafe, рефлексию и т.д.
1. Один символ занимает 2 байта (это же Unicode). 2. Строка это объект и у нее есть еще данные кроме самих символов. Да и массив символов тоже потребляет место. 3. Строки могут совместно использовать массивы символов. 4. Некоторые ссылки на строку, могут быть ссылкой на одну и ту же строку. Массив это объект. Как и любой объект у него есть накладные расходы: 8 байт на заголовок, 4 байта на длинну, и на данные. В случае с массивом объектов длинны 2 это будет 4*2 байта. Вот и считай, что лучше 2 * (8 + 4 + 75000 * 4) или (8 + 4 + 75000 * 4) + 75000 * (8 + 4 + 2* 4). -------------------- 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. |
||||
|
|||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: нет Всего: 33 |
я думаю должна быть возможность "попросить" у ВМ, больше памяти, программно. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Твоя программа жрет слишком много памяти, это все что можно сказать из твоего кода и объяснения. И ты хочешь чтобы тебе подсказали как уменьшить потребление памяти, при этом вообще ничего не рассказывая ни про алгоритм работы, не показывая кода, вообще ничего кроме маленького примера, который вообще неизвестно насколько близок к реальной проблеме. И ты считаешь что это реально? -------------------- 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. |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: нет Всего: 33 |
LSD, спасибо за разъяснение. многое прояснилось.
а по поводу программного перевыделения памяти - жаль конечно ![]() я уже подумал что можно "по человечески" разрулить ситуацию. типа этого:
тем не менее, всем спасибо. UP Это сообщение отредактировал(а) andrew_121 - 28.1.2010, 18:44 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ну можно попробовать пересоздать ArrayList и вызвать у него ensureCapacity() увеличив его немного по сравнению с предыдущим результатом. Просто в реальных приложениях такая работа на грани означает, что надо что-то радикально менять в алгоритме и/или железе (перейти на 64 бита или нарастить память). -------------------- 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. |
|||
|
||||
ernando |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
serghd, а можешь описать входные условия, ради чего тебе в памяти нужно дербанить 75к объектов, тем более массивов? Просто за все вермя работы в IT не приходилось гонять такие объемы, если это не было узкоспециализированной задачей, но там уже действительно выбирается другое железо и тюнится сама JVM.
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Кстати в данном случае, можно в класс Item добавить ссылку на следующий элемент и таким образом организовать связный список. Если нужна только однонаправленная итерация по списку, то это будет самый экономный способ динамического выделения памяти
![]() -------------------- 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. |
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
диапазоны IP адресов стран, нужно их перебирать для выяснения к какой стране относится ip. Для перебора - пропарсить xml с ними (каждый item будет иметь 6 типов данных - страна, ip_start, ip_end и др., поэтому и массив) и поместить в ArrayList, с которым потом и сравнивать. Почему установка VM Options -Xmx1600M не помогает, ей что, для такого массива надо больше 1600 мегабайт?? Это сообщение отредактировал(а) serghd - 28.1.2010, 19:01 |
|||
|
||||
andrew_121 |
|
||||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: нет Всего: 33 |
да, один из вариантов.
понимаю.
мне тоже интересно ![]() 75к объектов, это нормально. велосипед? кстати в моем варианте кода, получилось создать 100к объектов. просто добавил опцию для ВМ -Xmx128M. того, в сумме создано 800 000 строк. замечу не мало ![]() -------------------- Удалил аккаунт. Прощайте! |
||||||
|
|||||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Сам ArrayList будет занимать около 75 килобайт, остальное твои объекты. -------------------- 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. |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
serghd, почему вы так уверены что дело именно в массиве? Вы профайлер запускали, смотрели, кто именно жрет память?
-------------------- Opinions are like assholes — everybody has one |
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
||||
|
||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. Я говорил про ArrayList, но не про 75к String[]. 2.
спокойно отрабатывает и на 64 Мб. -------------------- 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. |
||||
|
|||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Этот срабатывает и у меня. Но реальная задача: VM Options: -Xmx512m (запуск нормальный, т.е. было выделено) Код всей программы (для разбора xml используется qt jambi):
Всего 70040 строк. Без "geoIp.add(mas);" 1 секунда работы без ошибок. С ним вылетает. Это сообщение отредактировал(а) serghd - 28.1.2010, 20:07 |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: нет Всего: 33 |
смотрю на код, и не въезжаю...какой же тайный смысл кроется в -
почему бы не воспользоваться классом состоящим их шести полей типа строки? в таком случае, ситуация немного измениться по двум причинам: 1. класс с шестью строками != массив строк. возможно и памяти для него требуется меньше. 2. свойства класса можно назвать внятными именами, соответственно, работать с ним проще. 3. это:
выглядит как-то нелепо, батарею напоминает ![]() в общем, простите новичка, если глупость сказал ![]() Это сообщение отредактировал(а) andrew_121 - 28.1.2010, 21:09 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
serghd |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
потому что результат тот же. На всякий случай:
берутся аттрибуты item'a, батарея будет в любом случае, это не "Random()". У меня такой массив без вылета работает максимум на 25 000 итераций, если без установок. С -Xmx512m вобщем-то тоже самое. Пробовал также делить 75к на 7 частей и пихать их в отдельные Vector'ы, потом группировать в один, то же самое. Это сообщение отредактировал(а) serghd - 28.1.2010, 21:42 |
||||||
|
|||||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
дело было именно в xml, либо реализации механизма работы с ним со стороны jambi. Забивает память, что больше 20к строк лучше не запоминать. Попробовал считывать данные из csv-формата (построчно как обычный текстовый файл) и заносить их в ArrayList - всё норм.
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ну вот нафига? Есть же SAX/StAX, которые в данной ситуации намного лучше подходят. Да и хранить IP в строке, тоже как минимум "странно". -------------------- 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. |
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
>>Есть же SAX/StAX Я использую DOM, а не SAX и jambi(при том, что весь проект на ней основан) для этого является очень удобным инструментом. Откуда мне было знать, что цикл с ним с более 20к итераций вызовет memory overflow. >>Да и хранить IP в строке, тоже как минимум "странно". А где же их ещё хранить? Там не только один ip. В БД типа mysql?) Парсится всё равно только 1 раз во время загрузки программы. Пример одного нода: <country ip_start="2.6.190.56" ip_end="2.6.190.63" num_ip_start="33996344" num_ip_end="33996351" flag="GB" >United Kingdom</country> Это сообщение отредактировал(а) serghd - 29.1.2010, 14:08 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
С точки зрения экономии памяти - int для IPv4, или long, тогда будет проще сравнивать. -------------------- 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. |
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
да, но в любом случае мне придётся конвертировать. Аттрибуты num_ip_start="33996344" и num_ip_end="33996351" содержат числовое представление ip, которое и буду переводить в int для сравнения. А что, можно разве как-то реализовать без конвертирования?
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Я не совсем понял, что такое num_ip_start, что это за число?
-------------------- 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. |
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Диапазон от num_ip_start до num_ip_end равноценен диапазону ip-адресов ip_start до ip_end. Путём простого преобразования их можно переводить один в другой. Сделано специально для удобства определения входит Ip в диапазон или нет.
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Я не понял, как это число связано с IP адресом? Это просто IP представленный как int, так?
-------------------- 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. |
|||
|
||||
serghd |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
да Добавлено @ 15:14 простой код
с использованием xerces тоже выдал ошибку о переполнении. Блин, придётся наверно отказаться от xml, и парсить обычный текстовый файл. Хотя установка -Xmx256m на этот раз помогла. Это сообщение отредактировал(а) serghd - 29.1.2010, 15:18 |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Используй StAX. (если выложишь пример XML, могу попробовать наваять примерчик)
-------------------- 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. |
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE geoIp> <countries> <country ip_start="2.6.190.56" ip_end="2.6.190.63" num_ip_start="33996344" num_ip_end="33996351" flag="GB" >United Kingdom</country> <country ip_start="3.0.0.0" ip_end="4.17.135.31" num_ip_start="50331648" num_ip_end="68257567" flag="US" >United States</country> <country ip_start="4.17.135.32" ip_end="4.17.135.63" num_ip_start="68257568" num_ip_end="68257599" flag="CA" >Canada</country> <country ip_start="4.17.135.64" ip_end="4.17.142.255" num_ip_start="68257600" num_ip_end="68259583" flag="US" >United States</country> <country ip_start="4.17.143.0" ip_end="4.17.143.15" num_ip_start="68259584" num_ip_end="68259599" flag="CA" >Canada</country> </countries> Спасиб. |
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 3 Всего: 17 |
Если уж хочется завязки на QtJambi, то в модуле QtXml есть необходимые средства - глава про "The Qt SAX2 Classes".
|
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Так я и так использовал jambi, но DOM. А что, в моём случае (~75000 нодов) SAX наверняка поможет? |
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 3 Всего: 17 |
Потребление памяти самим SAX-парсером практически не зависит от размеров исходного xml-документа и достаточно мало. В отличии от DOM-парсеров, где надо в памяти хранить дерево со считанными элементами/нодами. Почитайте как это работает - все станет ясно. Это сообщение отредактировал(а) Amp - 29.1.2010, 19:03 |
|||
|
||||
serghd |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
спасибо, а у вас случайно нету практического примера на jambi хоть какого-нибудь? А то в инете весьма трудно найти, максимум на с++. Тролли и так весьма скупы на примеры, а для sax их вообще в оф. документации нет. Это сообщение отредактировал(а) serghd - 29.1.2010, 20:23 |
||||
|
|||||
LSD |
|
||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Пока просто код без комментариев, через пару дней напишу статью в FAQ.
Я немного изменил XML, убрал ненужные данные:
-------------------- 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. |
||||||
|
|||||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
![]() насчёт статьи, думаю, и правда пригодилась бы. п.с. код (второй блок) выглядит жутковато)), комменты действительно не помешали бы. Видна рука профессионала. Это сообщение отредактировал(а) serghd - 2.2.2010, 15:11 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
-------------------- 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. |
|||
|
||||
sergioK |
|
||||||
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 15.2.2008 Репутация: нет Всего: нет |
[QUOTE=LSD,28.1.2010, 18:33]
т,е , если было 1000 элеметов то выделит 1500, перекопирует потом выделит 2250 , потом снова перекопирует и выделит потом 3375 и т,д, откуда предположения что имеено в 1,5раза ,? |
||||||
|
|||||||
jk1 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Исходники ArrayList это объясняют:
Это сообщение отредактировал(а) jk1 - 13.2.2010, 12:19 -------------------- Opinions are like assholes — everybody has one |
||||||
|
|||||||
sergioK |
|
||||||||
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 15.2.2008 Репутация: нет Всего: нет |
понятно, значит для решения подобных проблем связанных с нехваткой памяти , т,е, фактически нужно создать свой мемory меnagment перегрузив ensureCapacity , не увиличивать массив на 1,5 раза (тотому что при больших размерах может таки выбить )а скажем добавлять 10 и до тех пор пока не добавлены все 10 перекачку тоже делать не обязательно ) |
||||||||
|
|||||||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
И вместо 2,5 кратного потребления памяти получим ~2-х кратное. В общем выигрыш не велик ![]() Если уж так хочется выжать память по максимуму, то стоит данные хранить не в одном массиве а в нескольких. Т.е. данные хранятся в нескольких маленьких массивах по паре килобайт. Пример реализации. -------------------- 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. |