|
|
|
Неизменность строки в java - как это?
|
|||
|---|---|---|---|
|
#18+
azsxименно по такой формуле? ((23552 +1)* 2) + 2 уточнение: на самом деле увеличиваться будет по формуле ((х)*2) + 2, где х - исходная емкость azsxгде вы формулу прочитали? azsxА как всё таки память в переменной освобождать? присвоить переменной null чтобы понимать что же произойдет дальше - читай про GC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2016, 15:47 |
|
||
|
Неизменность строки в java - как это?
|
|||
|---|---|---|---|
|
#18+
Спасибо вот теперь стало понятно. К сожалению, про gc мне пока рановато читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2016, 17:34 |
|
||
|
Неизменность строки в java - как это?
|
|||
|---|---|---|---|
|
#18+
rema174azsxименно по такой формуле? ((23552 +1)* 2) + 2 уточнение: на самом деле увеличиваться будет по формуле ((х)*2) + 2, где х - исходная емкость azsxгде вы формулу прочитали? 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. Хотя нет, в 8й версия непонятная оптимизация произошла в той же фунции: http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/java/lang/AbstractStringBuilder.java Код: java 1. 2. Могли бы бинарные операции с маской использовать << 1 | 1; PS Кстати проверка переполнение int странная Код: java 1. 2. 3. может быть имело смысл кинуть exception а проверку делать выше? А то втихую выделили или проигнорировали запрос на увеличения буфера для очень больших строк. Все таки переменная называется minimumCapacity и если минимум не обеспечивается, желательно бросить ошибку чем потом падать по array out of bounds. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2016, 18:43 |
|
||
|
Неизменность строки в java - как это?
|
|||
|---|---|---|---|
|
#18+
uid unique Все таки переменная называется minimumCapacity и если минимум не обеспечивается, желательно бросить ошибку чем потом падать по array out of bounds. пардон, глупость сказал там же индекс int, надо больше отдыхать ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2016, 19:17 |
|
||
|
Неизменность строки в java - как это?
|
|||
|---|---|---|---|
|
#18+
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, когда всё в одном объекте. Даже в приватное поле без доступа снаружеиможет ломиться много потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2016, 06:25 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39364610&tid=2123402]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 378ms |

| 0 / 0 |
