Алексей Шипилёв - Сжимай меня полностью

แชร์
ฝัง
  • เผยแพร่เมื่อ 6 ต.ค. 2015
  • Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября (Санкт-Петербург + трансляция).
    Подробности и билеты: jrg.su/Ypf1HW
    - -
    . . . . Алексей Шипилёв, Oracle - Сжимай меня полностью
    Java-конференция JPoint 2015
    Москва, 20.04.2015
    Контроль над использованием памяти - это ключ к написанию высокопроизводительного софта. В этом докладе мы покопаемся в кишках JVM и JDK, в поисках того, как платформа пытается сэкономить на памяти. Посмотрим на упаковку заголовков и полей объектов, сжатие указателей, учёт ссылок между поколениями в куче, кэш автобоксинга и т.п.
    В качестве бонуса подглядим, как разработчики JDK пытаются незаметно сжать пользовательские стринги. Всё это обильно сдобрим описанием возможных граблей и измерениями производительности.
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 4

  • @ShamageMSK
    @ShamageMSK 3 ปีที่แล้ว +6

    Честно, я нихуяшеньки не понял, но ощущается, как будто понял. Оч интересно и приятно слушать

  • @razmus89dragovich20
    @razmus89dragovich20 4 ปีที่แล้ว +1

    класс, два плюса

  • @Alexander-mj3jk
    @Alexander-mj3jk 8 ปีที่แล้ว

    К вопросу об utf-8. String.charAt() только алгоритмически выполняется за константное время. На практике - кешмиссы.
    На практике конечно оверхед charAt будет существенным, так что если б я делал utf-8, то добавил бы класс CharIterator, а в нем методы seekRelative, seekAbsolute, next, prev, currentIndex, currentChar. Как-то так.

    • @Alexander-mj3jk
      @Alexander-mj3jk 8 ปีที่แล้ว

      +Yury Y да. Я о том, что если у нас есть указатель в середину, и мы знаем индекс этого символа, то относительно него продвижение вперед-назад на n символов будет за O(n). А на больших строках именно такая операция (как мне видится) - основная. И если у нас, допустим, есть позиция 10000 кодпоинта, а надо 11000, то мы можем отталкиваться от 10000 а не от 0, и мы потратим O(1000) а не O(11000). Ну и кроме того, надо на сам размер стринга смотреть. Потому, что если он например 11005, то лучше вообще на 11000 позиционироваться с конца.
      Вообще, в том стринге что есть сейчас, на самом деле, честных символов нет - из за долбаных суррогатов. Да, они весьма редки, но как говориться, - осадок остался. Если там где-то у вас в стринге есть суррогаты, то и length это уже не размер, и charAt это не факт что символ.
      Возможно, это лучше было б делать отдельным классом. Тогда стрингу оставили бы его O(1), а какой-нибудь utf8string занимал бы мало памяти.