![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Есть ли какое-нибудь ограничение на длину строки String? Или я могу ее наращивать, как обычный массив, пока память не кончится?
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Integer.MAX_VALUE. Массив большего размера не создать.
-------------------- 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. |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Ну что ж, вполне достаточно
![]() Спасибо -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Zandr |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 433 Регистрация: 16.7.2004 Где: Новосибирск Репутация: 9 Всего: 13 |
Кста....... String наращивать нельзя
![]() Если пишем
то на самом деле происходит примерно следующее:
Порой встречается такое:
По умолчанию не помню сколько Java выделяет памяти... Что-то около 60-80 метров, и при таком стиле наращивания длина строки не может превысить 30-40 метров (мы не считаем что память используется не только для наших строк). Так что работаем через StringBuffer, причем желательно угадать заранее максимальную длину строки и при создании StringBuffer'а её указать. И напоследок вопрос: зачем такие строки? Если с большими файлами работаешь - можно попытаться найти альтернативу в nio. Можно строчки поразбить и хранить их в List'е или еще как-нить. Это сообщение отредактировал(а) Zandr - 26.2.2005, 12:08 |
||||||
|
|||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
ЗЫ
В Java 1.5 используется StringBuilder вместо StringBuffer. -------------------- |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Zandr
Спасибо за совет. Знал же, а не подумал. Учту. Это может привести к выделению памяти под кучу строк без ее освобождения? Domestic Cat
Это аналогичный заменитель или есть качественная разница? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
StringBuilder быстрее, т.к. не синхронизирован. Он используется там, где гарантированно будет работать 1 тред.
-------------------- |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Т.е. только один тред будет работать с моей строкой, да? А если в каждом потоке будет своя строка обрабатываться, то его можно использовать, верно?
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Конечно.
-------------------- |
|||
|
||||
Zandr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 433 Регистрация: 16.7.2004 Где: Новосибирск Репутация: 9 Всего: 13 |
Нет, память то будет освобождаться, просто видел один раз как для JME приложения кто-то свою функцию рекомендовал для загрузки файла в кодировке win-1251. Так там в цикле к строчке прибавлялась буковка. Автор функции (а может и не автор) еще заметил, что она медленно работает... Я вот тоже подумал с чего бы это ![]() Просто это называется memory burning, или как-то так, когда без толку создается-уничтожается много объектов, когда можно было бы обойтись одним. Кстати, если не задать StringBuffer'у достаточной начальной емкости, то получим примерно тот же эффект. |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Плохо. Строка формируется по записям из БД. В зависимости от настрек пользователя некоторые таблицы загружаются, некоторые нет, т.е. невозможно предугадать необходимую емкость. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
StringBuffer при расширении, удваивает буфер. Так что тут ничего особо страшного не будет. Конечно если есть возможность спрогнозировать размер лучше ей пользоваться, но если нет, то StringBuffer работает достаточно рационально. -------------------- 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. |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Еще лучше организовать свою структуру на связанных контейнерах строк. Если нужно отредатктировать подстроку разбитую на два контейнера(replace например), то тогда обьеденяем оба контейнера в один. Память при таком подходе практически не засоряется и почти не хаваем лишнего.
Для выборок из БД лучше такие быстрые структуры как HAT. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Что такое НАТ? У меня выборка происходит не напрямую, а через объект. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
HAT структура очень простая и главная её задача эффективно увеличиватся в размерах. Естественно есть куча ограничений, потому и смотрим что конкретно нужно. Обычно выборка из БД это забивание контейнера даными и потом уже обработка. Если запрос не сортирующий и не групирующий, то можно использовать простые быстрые связанные списки, иначе разного рода деревья, позволяющие после набивки без дополнительных усилий представить как надо выборку. Нагрузка на процессор и память при таком подходе минимальная.
Для наращивания создай свою стуктуру похожую на связанный список, хранить ты будешь строки. Естественно предлагается интерфейс строки + метод normalize, который разом склеивает все строки в одну для последующей быстрой обработки, если надо. При таком подходе память продублируется в конце(что не необходимо), в момент работы лишнего мусора не будет. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |