powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Неизменность строки в java - как это?
5 сообщений из 30, страница 2 из 2
Неизменность строки в java - как это?
    #39364086
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
azsxименно по такой формуле? ((23552 +1)* 2) + 2
уточнение: на самом деле увеличиваться будет по формуле ((х)*2) + 2, где х - исходная емкость

azsxгде вы формулу прочитали?
google

azsxА как всё таки память в переменной освобождать?
присвоить переменной null
чтобы понимать что же произойдет дальше - читай про GC
...
Рейтинг: 0 / 0
Неизменность строки в java - как это?
    #39364100
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо вот теперь стало понятно. К сожалению, про gc мне пока рановато читать.
...
Рейтинг: 0 / 0
Неизменность строки в java - как это?
    #39364113
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174azsxименно по такой формуле? ((23552 +1)* 2) + 2
уточнение: на самом деле увеличиваться будет по формуле ((х)*2) + 2, где х - исходная емкость

azsxгде вы формулу прочитали?
google

azsxА как всё таки память в переменной освобождать?
присвоить переменной null
чтобы понимать что же произойдет дальше - читай про GC
В исходниках, увеличение массива char происходит по формуле (х + 1)*2. Остальными байтами в классе пренебрегаем для больших строк.

http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/tip/src/share/classes/java/lang/AbstractStringBuilder.java
Код: java
1.
2.
void expandCapacity(int minimumCapacity) {
        int newCapacity = (value.length + 1) * 2;


Хотя нет, в 8й версия непонятная оптимизация произошла в той же фунции:
http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/java/lang/AbstractStringBuilder.java
Код: java
1.
2.
void expandCapacity(int minimumCapacity) {
     int newCapacity = value.length * 2 + 2;


Могли бы бинарные операции с маской использовать << 1 | 1;

PS Кстати проверка переполнение int странная
Код: java
1.
2.
3.
if (newCapacity < 0) {
     newCapacity = Integer.MAX_VALUE;
} 


может быть имело смысл кинуть exception а проверку делать выше? А то втихую выделили или проигнорировали запрос на увеличения буфера для очень больших строк. Все таки переменная называется minimumCapacity и если минимум не обеспечивается, желательно бросить ошибку чем потом падать по array out of bounds.
...
Рейтинг: 0 / 0
Неизменность строки в java - как это?
    #39364125
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid unique Все таки переменная называется minimumCapacity и если минимум не обеспечивается, желательно бросить ошибку чем потом падать по array out of bounds.
пардон, глупость сказал там же индекс int, надо больше отдыхать ;-)
...
Рейтинг: 0 / 0
Неизменность строки в java - как это?
    #39364610
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsx0. Вы меня точно не обманываете? Почему все программисты на java пишут String, а не StringBuffer если он изначально настолько лучше? Может на самом деле компилятор всё это преобразует в builder без явных указаний?

Храниить строки надо в string - он для этого лучше. Создавать- билдером.

azsx1. Что такое 16? utf 8 может быть от 2 до 4 байт, если не английские символы. То есть мне надо 16 делить на 2? Например, в среднем главная занимает 23 кб, мне надо выделять (23*1024) как на диске или ((23*1024)*2)? Надо ли ваще выделять память самому?

16 символов.

azsx2. Почему последние 2 вывода не чистят память? Как снова вернуть 16 байт?

Билдер- чтобы собрать строку и выкинуть билдер. Поэтому он память не чистит- он весь в мусор.

azsx3. Я абсолютно точно понял, что buffer надо юзать, когда строка public и сразу много потоков в неё пишет, стирает. А builder, когда всё в одном объекте.

Даже в приватное поле без доступа снаружеиможет ломиться много потоков.
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Неизменность строки в java - как это?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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