Алексей Шипилёв - Катехизис java.lang.String

  Рет қаралды 55,633

JPoint, Joker и JUG ru

JPoint, Joker и JUG ru

Күн бұрын

Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября (Санкт-Петербург + трансляция).
Подробности и билеты: jrg.su/Ypf1HW
- -
. . . . Алексей Шипилёв, Oracle - Катехизис java.lang.String, Java-конференция JPoint 2015; Москва, 20.04.2015
jokerconf.com - Ближайшее выступление Алексея: Joker 2016, 14-15 октября 2016.
В приложениях кровавого энтерпрайза и прочих продуктах, что так или иначе связаны с обработкой текстовых данных, порядочное количество памяти и времени тратится на возню со строками. Оптимизации работы со строками часто дают немедленный выигрыш, а то и уворачивание от OutOfMemoryError.
В этом докладе будут рассмотрены основные пороки работы со строками: чревоугодие конкатенации, блуд подстрок, корыстолюбие интернирования, гордыню дедупликации и прочее. Кроме того, речь пойдет о том, чего стоит излишняя надежда на JDK и JVM.

Пікірлер: 35
@atomic.rabbit
@atomic.rabbit 3 жыл бұрын
Смотришь Шипилева и настроение улучшается.
@НикитаСоколов-ъ7н
@НикитаСоколов-ъ7н 8 жыл бұрын
Шикарный доклад! Много нового узнал.
@НайманКопеев
@НайманКопеев 3 жыл бұрын
Хороший доклад. Правильно говорит, что нельзя опираться на советы, нужно самим проводить проверки и на своих задачах.
@ysparrow1
@ysparrow1 8 жыл бұрын
Очень!
@travacry
@travacry 7 жыл бұрын
отличный доклад.
@MrJavaNinja
@MrJavaNinja 6 жыл бұрын
хорошо рассказывает, не устаешь слушать как от некоторых
@savar33
@savar33 9 жыл бұрын
а что его спросили на 46:20? :)
@wunm6249
@wunm6249 5 жыл бұрын
Шикарный доклад !
@9080artur
@9080artur Жыл бұрын
Гений!
@MacIn173
@MacIn173 8 жыл бұрын
На 36 слайде минуса не хватает или a(n-1) и b(n-1) местами поменять надо.
@СергейСамойлов-м5т
@СергейСамойлов-м5т 7 жыл бұрын
Не понимаю. Если intern такой перегруженный, то почему в него кладутся ВСЕ литералы ???
@aljesco8338
@aljesco8338 6 жыл бұрын
На 19:50 начинается странная дичь. Я, конечно, со второго раза таки понял, что Алексей говорит о потере производительности при пересчёте хэшкода, если он как раз попадает на нуль, но при проверке у себя я такой аномалии не обнаружил. При первом расчёте хэшкода есть аномалия по времени его вычисления, но повторные расчёты хэшкода выполняются очень схоже. Вот данные: строка - хэшкод - время расчёта хэшкода, нс сверхинструментом пренебрегшая: 0, 56909 сверхинструментом пренебрегшая: 0, 928 пренебрегшая сверхинструментом: 462434972, 619
@garncev
@garncev 3 жыл бұрын
Потеря производительности когда хеш случайно стал 0 заключается в том, что хеш будет вычисляться каждый раз когда вызывается hashCode() и не будет закеширован. У первой строки хеш-код 0. И будет каждый раз вычисляться. У второй строки хеш-код не равен 0 и будет закеширован. И получить его значение можно из кеша внутри строки.
@LeMenas
@LeMenas 3 жыл бұрын
Ну булеан таки сделали да? :)
@strash1692
@strash1692 3 жыл бұрын
20:31 Я так и не понял ответа, почему время получения кеша двух одинаковых по длине строк на порядок отличается? Может кто-нибудь пояснить, плз? Алексей сразу прыгнул на другую тему с аномалией кеша хешкода равному нулю.
@АдамСмит-ы7р
@АдамСмит-ы7р 3 жыл бұрын
Так это не другая тема - у одной из этих строк hashCode() == 0, из-за этого и случается аномалия
@strash1692
@strash1692 3 жыл бұрын
Ааааа... т.е., видимо, у первой строки анамальный хешкод и из-за этого тест очень длинный (т.к. много итераций прогоняется и каждый раз хешкод считался снова и снова), а у второй - обычный и поэтому хешкод один раз рассчитался, а потом просто возвращался - в среднем на много итераций время получилось очень малым. Верно? Спасибо.
@stokitko
@stokitko 6 жыл бұрын
Кешировать хешкод в строке вообще сомнительная затея как по мне. Из-за этого объект строки распух на 8 байт - 4 байта int хешкода и 4 байта на выравнивание (т.е. вообще неиспользуемое место). В результате 24 байта, а если убрать хешкод то строка будет занимать 16 байт. Это может показатся экономией на спичках, но нужно не забывать что кешлайн процессора всего 64 байта Всё таки большинство строк не участвуют как ключи для хешмапов. А даже если участвуют то это лучше заоптимизировать компилятором там.
@МатвейКоноплёв-б8ю
@МатвейКоноплёв-б8ю 4 жыл бұрын
Почему так похоже на пересказ главы про String’и в Эккеле?)
@АдамСмит-ы7р
@АдамСмит-ы7р 4 жыл бұрын
Шипилёв: в String нет места для дополнительного флажка, распухнет на 8 байт Также Шипилёв, парой лет позже: а давайте кодер в String сохраним, вроде и место для него на всех мэйнстримных платформах есть!
@igorm.9845
@igorm.9845 4 жыл бұрын
Да, тоже заметил. Но там вроде только в 64 битных VM место есть, если я правильно понял.
@Sulphuris
@Sulphuris 4 ай бұрын
Так кодер и нужен для экономии памяти на самих символах, тут выигрыш гораздо больший чем размер одного кодера
@igorm.9845
@igorm.9845 4 жыл бұрын
Я не понял, почему нельзя хешкод вычислить сразу при создании строки и брать его всегда готовым. Без этой свистопляски с кешированием.
@НайманКопеев
@НайманКопеев 3 жыл бұрын
вычислять хэш дороговато, нужно пробежаться по всем символам строки. поэтому хэш вычисляется только если нужно сравнить эту строку с чем-то.
@igorm.9845
@igorm.9845 3 жыл бұрын
@@НайманКопеев зато при каждом последующем сравнении быстрее работать будет, это важнее.
@strash1692
@strash1692 3 жыл бұрын
Он и берётся всегда готовым, т.е. кешируется. Просто рассчитывается не сразу, а только при первом обращении.
@garncev
@garncev 3 жыл бұрын
Не всегда хеш нужен.
@kalinkaou2767
@kalinkaou2767 8 жыл бұрын
А где слайды можно скачать?
@ВасяВ-ь5м
@ВасяВ-ь5м 7 жыл бұрын
раздвоение личности? )))
@kalinkaou2767
@kalinkaou2767 7 жыл бұрын
Нет, просто решил себя не утруждать поиском, но потом устал ждать ответа и решил взять инициативу в свои руки ;)
@russinwrshi9315
@russinwrshi9315 8 жыл бұрын
Глупец какой-та.
@ВасяВ-ь5м
@ВасяВ-ь5м 7 жыл бұрын
школота, ты каналом ошиблась )))
@jameswebb100
@jameswebb100 6 жыл бұрын
Целый час бред про стринг. Надо быть упоротым ,чтобы такое количество времени убить на это.
@iazarov
@iazarov 5 жыл бұрын
На самом деле не бред. В частности про методы работы с памятью. Хотя да 40% размышлений и методологим было изложено ещё в доке по jdk 1.1 - например рекомендации по быстрому конкату строчек.
Алексей Шипилёв - Сжимай меня полностью
55:20
JPoint, Joker и JUG ru
Рет қаралды 13 М.
Watermelon magic box! #shorts by Leisi Crazy
00:20
Leisi Crazy
Рет қаралды 71 МЛН
когда не обедаешь в школе // EVA mash
00:51
EVA mash
Рет қаралды 3,9 МЛН
Win This Dodgeball Game or DIE…
00:36
Alan Chikin Chow
Рет қаралды 41 МЛН
C++ Siberia 2019: Антон Полухин, C++ на практике
54:26
RxJava доставляет  Артём  Зиннатуллин
37:39
Назар Цибульський
Рет қаралды 25 М.
Евгений Борисов - Spring - Глубоко и не очень
1:03:57
JPoint, Joker и JUG ru
Рет қаралды 159 М.
Creator of git, Linus Torvalds Presents the Fundamentals of git
1:10:15
Developers Alliance
Рет қаралды 102 М.
Лучший Гайд по Kafka для Начинающих За 1 Час
1:15:01
Алексей Шипилёв - The Lord of the Strings: Two Scours
1:02:27
JPoint, Joker и JUG ru
Рет қаралды 6 М.
Watermelon magic box! #shorts by Leisi Crazy
00:20
Leisi Crazy
Рет қаралды 71 МЛН