Всем добрый вечер Давайте начинать кто хорошо меня видит и слышит ставим в лисичек Темно Ну да Просто другая камера сегодня если принципиально могу принести более светлую Да да да да да да да О Мне кажется так намного лучше Схватил утащил ребенка кальмар Окей Хорошо так ладно Поехали сегодня у нас с вами профайлинг ржавых приложений Занятия полностью практическая вообще без презентации Поэтому сразу шариваем экран И постепенно начинаем Так скажите пожалуйста вопросы какие то появились у вчерашнего урока Ой Кого то дети В в принципе можно спросить голосом но только без без лишнего фона Что можно спросить в чат Случайно бывает Так хорошо вопросы какие то с предыдущего урока как вам видео Наших Наших лучших людей Стало понятнее чуть чуть со вчерашнего дня Михалков 1 посмотрю Веселенько да интересно согласен так хорошо значит Что мы с вами сегодня делаем мы с вами сегодня профилируем приложение попрошу вас сразу Сразу у нас открыт интере шаги чего то принципиально сложного писать сегодня не будем поэтому достаточно обычного концерна проекта Да Ой товарищи да я прошу прощения да видимо я вам прислал презентацию с курса по интеграции я дико извиняюсь я сегодня это поправлю Ну зато у вас есть есть есть теперь презентация по интеграции извините пожалуйста Да есть сегодня где сегодня материалы по меня Хорошо Так Пожалуйста Так попрошу вас сразу открыть intelite shadeo значит сделать обычный консольный проект можно greenal можно мы видим вообще все равно ничего принципиально сложного я же сказал мы сегодня в нем писать не будем просто нам нужно понять как собственно наш с вами замечательный код отражается на показателях профайлеров также Также смотрите у нас с вами есть несколько инструментов для того чтобы заниматься таким интересным делом как профайрен Значит профайлингом можно заниматься на самом деле с помощью достаточно большого количества инструментов Значит что у нас сегодня будет и чего не будет но с чем надо будет ознакомиться Значит сегодня мы с вами посмотрим во 1 базовый профайлер из поставьте джава он с точки зрения своего интерфейса достаточно уродский Но с точки зрения функционала он вполне себе даже приятен хоть он и не производит впечатление какого то мега крутого продукта Но тем не менее Вот значит этот момент 1 да также мы посмотрим более приятный профайлер это в частности джей профайлер вот он но является сразу говорю платным продуктом но там есть 3 аллочка если правильно помню меня вроде она еще действует если нет ну я в Процессе наверное его куплю давно пора вот собственно посмотрим с вами профайлер джей профайлер чего мы с вами не посмотрим но что можно на самом деле посмотреть Вот это собственно Это собственно еще директивы linux в принципе я не просто так бросил вам те 2 видео в принципе основные дедукционные пакеты которые используются для анализа скорее машине в общем до они конкретного предложения они там перечислены Есть еще раз если если нужно посмотреть не конкретное приложение а посмотреть на то как себя чувствует машина то вот этому вот вот это как раз таки можете можете посмотреть там Это всяческие там пары Сис статуи и прочее прочее прочее то есть там в полный команд полный список команд 2 самых пакетов которые собственно для этого предназначены то есть мы будем заниматься именно профайлингом приложить профайлинга приложить + есть невероятно крутая тема Которую я вам скину еще обязательно видео Значит Диэмэйдж Джава микра бенчмарк харнес Значит эта вещь на которую в принципе можно потратить 3 4 интенсивы все равно будет много чего хорошего это фреймворк который разработал собственно наше все алексей шепелев Который позволяет заниматься бенчмаркингом Вот и замерять рабочие особенности каких либо методов вот jmage я вам скину во 1 по нему достаточно приятное видео Понятно я был 2 Не надо ничего отпирать ребенка пожалуйста Вот я вот уже у своего ребенка отобрал камеру он уже не доволен вот ага значит Нет это пригодится вообще а не на курсе то есть на на курсе нет на курсе мы занимаемся профайлингом именно приложений а не всей машины на поэтому в принципе это вам пригодится в работе то есть смотрите чтобы получить полную картину до надо профайлить не только приложение но надо профарить в том числе и машину на которой вы работаете поэтому директивы и вину с из видео вам в помощь но на курсе мы не будем на этом сильно сосредотачиваться я очень долго думал над тем вставлять или не вставлять gmage в этот интенсив все таки решил что нет потому что там довольно объемная тема но Скажем так если все пойдет хорошо может быть вы все таки что то сделаем потому что невероятно крутая Которая позволяет померить практически любой метод который у вас работает как насколько долго у вас там дает какой либо ответ вот при этом сделать это практически без накладных расходов что важно то есть проблема бичмарков в том что бенчмарки тоже влияют на бенчмарки поэтому вот здесь и вот здесь эта проблема по большей части устранена что конечно не круто поэтому я но это я вам оставлю как факультатив Вот все таки здесь мы будем по большей части у нас обращаться к профориваем приложение вот профайлеры приложений у нас давайте сразу Вместе поставим джей профайлер значит просто заходим в google Джек рафаэль намлоут Вот Значит сразу ему скачайте начните ставить там триалка на 30 дней я надеюсь что мне на машине она еще есть но потому что эту машину я тоже не использовал пока для профайлинга вот мы с вами посмотрим и его и виндовый Научимся сегодня с ними работать значит в планах у нас сегодня профайлер профайлинг процессорного времени и профайлинг мемори при этом мы будем анализировать это как статически то есть у нас будет трафик trade the hipdom посмотрим на него внимательным взглядом И у нас с вами будет и у нас с вами будет анализ живой нашего приложения Собственно пока пока мы будем разбираться с базовым профайлером Ставьте джей профайлдер сразу он достаточно быстро ставится вы не потратите на это много времени Значит прежде чем что то начать пропали давайте напишем что мы там можем запрофайлить у нас сделаем какой нибудь Мелкую но не хорошую Историю Значит А значит сделаем Следующая Фуре Зараны от 2000 у потоков Будем буду буду это ранить специально без использования javy youtube comcarent Чтобы как бык так сказать ближе к железу Значит объявим сразу у нас в коде А при кстати кран бал Юра на бал Допустим просто пока 1000 потоков Которые будут делать пока что безо всякой крутой синхронизации просто будет делать так слип На минутку Можно при желании кстати потом это усложнить там на случайное время будем засыпать Слип Потом Можно Порезать нашу тату Дрит Эйт фром инстнт нау Причем желательно тоже в каком яйцекле Не особенно важно я сейчас пишу условно любую таску Которые у нас Которые у нас собственно будет Который у нас будет грузить наш процесс В принципе не принципиально прям обязательно прям все за мной повторять Будет полезно Вот примерно вот такая Нагружающая трос Задачка Я специально не пишу сейчас ничего в консоль потому что это будет совсем другая история в Ветер и свинцом Пока дописывайте в принципе основная идея понятно то есть мы стартуем 1000 потоков Должна быть и не тычка пока строен а то Значит стартуем 100 потоков Значит каждый поток в начале слипаем Потом запускаем 1000 итерации по 100 миллисекунд которые вычисляют нашу текущую дату По возможности давайте эту дату используем потому что у нас есть прекрасная история с оптимизацией Которая может а может эту инструкцию лишь у нас пропустить мы знаем что джава периодически любит устраивать нам такие Интересная вещь то есть любят пропускать неиспользуемые кусочки кода Такое масло масляное ты завтра дейд и важно Просто чтобы она где то использовалась Так сколько у нас получится 1 секунда 1 секунда Получится 100 секунд как то не очень много поэтому давайте побольше операций сделать 1000 секунд нам пойти и должно хватить дописывайте код и будем его профайлить Можно кстати джей профайлер про интегрировать с интейт шайди и то есть нажать кнопочку integrade так кстати не так долго делается то Ладно я особо сейчас не буду этим заморачиваться но вообще довольно полезная история Тоже его запущу Давайте скинем трудно Тем более ценности в нем особенно никакой Авито 10 дней Так джей профайлер пока сворачиваем Мы до него дойдем не сразу А забираем код runam код Так вот они полетели Атоки Можно без гаймана То есть сэр тайно можно не делать Пока что по крайней мере Так у всех я думал код запустился если у кого то нет пишите Слушайте и принципе это для целей именно данного урока вообще не принципиально если хотите могу поставить 11 Да там некоторые структуры конечно будут отличаться но не принципиально для данного урока Если надо поставлю В общем проблема Для нас особой ценности в этом нет Так собственно заходим Замечательную историю под названием jmc где ее найти пока смотрим базовый профайлер Значит он у вас находится Джеймсит джаваддин сильно изменился Ну мы все равно будем бы джей профайлером большую большую часть времени пользоваться Ладно уговорили Просто не рабочая машина Ну потяните 11 будем считать что на нем говорили А мне так уж и много Так Давайте все таки пока откроем старый gms Gtc у кого стоит 11 java java open jdk По моему там тоже есть он Поставки хотя я не уверен у меня раковая поставка Я понимаю что этому не очень долго осталось но Значит в любом случае заходите пока он остается там 11 значит заходите в местоположение вашего gdc Бен Кладочка джимси точка икс з Не запускай новую Ну это не принципиально можете поставить 8 ничего страшного Не случится от этого все равно мы посмотрим его А основные возможности Только и потом все равно перейдем к джей профайлеру Можно было бы хоть джей и вижу вм открыть она на самом деле тоже достаточно неплохая Если у них не пользоваться Запустилась Так смотрим на этот Великолепный интерфейс Значит у всех открылся joungession control по крайней мере хоть у них какой то версии У кого открылся пишем плесик Ого Так значит когда он у нас открылся у вас слева здесь есть окошки по процессу Это в общем то текущее Травы процесса которые этот профайлер наблюдает На основании данных от этой машины Вы можете на самом деле построить очень очень много то есть любое ваше ваше приложение как вы помните мы со вчерашнего занятия оно Оно на какие то свои действия требует наличия или отсутствия определенных ресурсов Значит но это всего лишь пол ответа полный ответ у нас состоит в краске в том что Нам нужно понимать какой ресурс на что у нас Вот что вот что самое важное И как раз таки профилировщики нам в этом могут помочь То есть данный инструмент позволяет нам Под микроскопом разглядеть наше приложение И собственноручно Посмотреть посмотрите что она из себя представляет Значит у каждого процесса есть раскрывающаяся менюшка и есть 2 2 основных пойнта это mbin сервер и флайт рекордов Текущие джава процессы которые у нас тут есть это собственно сам сам сам по себе джава мишин confrol потому что он тоже является джава приложение с Можно анализировать сам себя вот это замечательная вещь по собственно джей профайда градал даймон А значит Интеллидж айдиа Как ни странно да Тоже у нас здесь висит Вот и И да и собственно Remote mailine сервер но это у меня с прошлого курса осталось мерили мне там подтягивал что то видимо не закончил Соответственно мы с вами двигаемся дальше и заходим в каждый конкретный процесс для того чтобы у нас не Собственно это было достаточно комфортно Значит я пока запущу ему на нашу программку Вот И вот она у нас появилась В нашем профане У нас для нее есть 2 пойнта Значит это эмбин сервер и fmi 3 корда в принципе в j профайлеры будет примерно то же самое Значит открываем сначала Он иногда не очень быстро открывается к сожалению Так задачка вроде еще радуется Куда то она переехала в 11 крым Не суть Значит смотрим что у нас есть а есть у нас в нашем mbn сервере достаточно много Достаточно много интересного всего значит момент номер 1 1 вкладочка под названием Наш вот овервил Показывает нам с вами Текущее общее положение На нашей машине сколько у нас кушано процессор моноресурса И сколько у нас откушено ресурсов кип При этом уже здесь есть на самом деле масса интересных показателей Значит во 1 Можно у нас какие то вещи выбирать то есть Это сколько занято именно машиной Это сколько занято именно jvn то есть это у нас уже 2 достаточно разных показателя Который у нас встречается если вдруг кстати вы забыли какие то показатели которые здесь есть почти везде то Есть так называемый у нас Тата settings нашего наших историков и мы можем сюда добавить То есть можем нажать сюда плюсик И добавить добавить сюда каких угодно нам нам удобных показателей то есть Пожалуйста Значит открыли хистор это убью Дата сэтинс на + И вперед Есть достаточно много интересных диаграмм Принципе все они так или иначе у нас отражены на других на других кладках но если вы хотите их на нашем интервью можете это сделать вот например есть На жопе финиш Так и он должен По идее добавится сейчас трейдинг Вот у нас вот у нас добавилось Текущее количество трудов Мы сделали 100 трудов мы видим что они нас это такая Очень упрощенное наблюдение за машиной можно посмотреть Использование общей физической памяти Посмотреть там верхние показатели типа Закомиссенного типа Используй Нашего наш порядок память физическую но это вкладка по большей части вам ну Бывает полезно если вы там зашли и у вас там огромные Цифры по крайней мере там в моей голове да Уже на самом деле давите в В нашем Процессоре уже видно что И все так уж хорошо еще бы я за рану 100 потоков С кучей системных вызовов Там Процессор себя уже чувствует не очень хорошо Достаточно банальные простое значит есть следующая вкладка переходим дальше nb браузер Значит эмбин браузер на самом деле Тоже очень скажем так мощная вещь Позволяет нам вызывать Реальные системные функции java машины и посмотреть какие то реальные показатели Не советую прямо прямо лазить часто в эту В эту часть она она бывает периодически полезно вот если вы откроете вкладочку apperations Вот Ну допустим вот можно Можно Попросить нашу систему например Некоторый аккаунт серый и не добавляется но это уже отработало приложение Скорее всего А недоступен трек таун Запустить мишин контрол под админом Должно по идее помочь Значит некоторые вещи можем запустить на Но я бы все равно не сильно советовал это делать Это скажем так немножечко другая история Там где то Иногда может быть полезной но опять же я бы не советовал Что то из этого раны это интересная вещь но мне в рамках данного курса поскорее по общению с джава машиной А не туда добавлять ну окей Вот дальше нас интересует вот эта вещь вот эта вещь она очень очень полезна Несмотря на то что опять же базовая поставка здесь кстати все равно очень много полезных историй Это триггеры Значит в ответ на какие Действия в вашей системе что нужно сделать То есть это возможность скажем так сразу вам сообщить Как использовать gms на планшете расскажу Джеймс Значит значит можно вот как минимум подключить эти триллеры Есть сразу если говорить про gms на проводе Есть такая особенность что здесь есть Процессы локальные И можно и можно на самом деле добавить сюда Процессы удаленные То есть сейчас будет автобус В коннект 3 ньюканекшн То есть здесь делаем файл коннект Крик ньюканекшн И вы можете добавить хост другой java машины Подключиться к ней на самом деле почти любая jave машина она оставляет jamexposs Вот с таким портом если только ваш обмен его не закрыт Соответственно зная айпишник машины можете подключиться к ней и она у вас будет выглядеть в принципе как точно такой же процесс Это очень важно именно для пруда чтобы ваше ваше мониторинговое приложение оно местами Вот вот он все что вы здесь будете делать она местами может кушать ну достаточно много ваших ресурсов + вам периодически придется Занимать Track dump и hip dump и анализировать это все после падения как правило анализировать это на машине которая в данный момент в крашится то Практически невозможно то есть скорее всего вы не успеете поэтому пожалуйста удаленный в На соединение да Коннект Клеить new connection вот по такому порту обычно его оставляют Оно как бы достаточно полезное А если несколько джемаев запущено разом тогда нужно подключаться ко всем Объединять их в пулы теоретически можно в частности джей джей профайл позволяет это делать но это все равно не очень полезно То есть полезно анализировать каждый отдельный процесс Понятно что есть определенная синергия но все равно все равно скажем так вам вам будет проще если у вас Будет анализироваться каждый каждый человек по отдельно А вы вы имеете ввиду если на машине запускается больше 1 она Она все равно оставляет gmx порты А сейчас Смотрите То есть вы соединяетесь по вот этому порту на самом деле со службой gmx А служба джимб икс Ну ло колхоз по идее мы сейчас подсоединимся сами к себе Если вам было доступно Не хочет на угол косы меня пускать в общем на самом деле когда вы подсоединяете эти джимэс свою вашему хаску вы подсоединяете мир конкретному приложению то А вы подсоединитесь Только списку приложений на всей этой машине То есть у вас jmx сервер все равно есть эта служба Ваши взял машины вообще То есть вы ее можете в принципе по 1 этому порту получить доступ да Ваша информация о всех машинах которые Там находится ну единственное что обычно понятно грамотно там отмены это вещь пароля Завтра с 10 У нас авторизация и ее запасы все серьезно То есть по мне можно подрубиться к проводу Значит 1 вещь которая необходимо продумать здесь Вот Это триггеры Использование Процессора Эти по моему приложения еще работают Использование процессора Причем как слишком большое так и слишком маленькое здесь вот уже начинаются такие Истории по Сигнализации на самом деле и сильно большое использование процессора это Понятно плохо это как раз ясно но и слишком слабые использование процесса означает что какие то потоки либо упали либо заблокированы друг другом соответственно по Вы не можете скажем так Дальше делать свою работу именно поэтому у вас не используется ваше процессорное время Причем есть привязка к использованию вашего цепого как на конкретном жилом процессе так и с ним ошибок Значит у вас есть Собственно Текущее значение что очень удобно И у вас есть дальше значение mintriger very То есть на какое значение цпу у вас будет срабатывать данный день ну в данном случае мы прям совсем больше отживаем всего могу поставить например 85 Так ну только не ту лоу а ту фай Да И jvm процесс 85% Дальше дальше вкладочка с юта был период То есть за какое Составим период То есть какое время должен продержаться этот Показатель Какое время должен Продержаться этот показатель Да при подключении пока что список Какое время должен должен должен этот показатель чтобы этот лидер сработал И какое время вообще у нас будет будет будет выделено до того скажем так как эта ситуация станет для нас для нас нормальной то есть вот мы Поймали этот триер Он конечно удержится 1 секунду и дольше Но после того как собственно он продержался 60 секунд мы перестаем моем мониторе все мы ее уже и так расрубили по всей Трупы Вот и собственно Дальше дальше дело затем чтобы исправлять Значит вот это мы написали наш подкандишом То есть Это условие срабатывает + я вот эту штуку активировал Значит дальше нам нужно выбрать действие которое У нас у нас будет запущена В ответ на данный триггер Значит это может быть аппликейша наверх В принципе как правило не используются все равно вашему приложению Консоль аутпут тоже не особо интересна Значит эйч пром да Вот это достаточно Достаточно интересно это сдам пить вашу память В какой либо файл Если если у вас не слишком большие объемы это может быть в ряде случаев достаточно хорошей идеи То есть вот у вас случился Случилась какая то перегрузка да вы сдамили собственно вашу память Значит вок и диагностик команды на самом деле команды Кроме может быть тех опять же которые вызывают те же самые тампы Практически все довольно таки не особо полезны Гц ран Оно не запустит сборку мусора Вот если что здесь может быть полезно вм там он мог коммерческих и сейчас Это для того чтобы позволить Потартовать нашему fmy 3 контуру Вот так пожалуй важный момент Ману мы еще прохлад рекордов будем говорить то есть чтобы позволить записывать это приложение в жопу Лохту файл может быть интересной идеей Также также интересные идеи у нас может быть У нас отправка е мейла Наша отправка email Вот то есть опять же вот это как раз и правильно история то есть мы можем взять и допустим нашему дежурного системного администратора написать Имейл меня извините отвалилось приложение потому что потоки закончились сейчас я их перезапущу И мы еще раз подсоединимся Еще раз возвращаемся Тухай экшен Вот они Значит также мы можем запустить Флайт рекорда это запись текущего состояния вашей машины Вы про нее более подробно разговаривать Значит можно ее запустить continues да то есть Бесконечную да то есть вот мы поймали какую то трея начали записывать Но это реже используется обычно делается все таки Лимит от запись то есть мы допустим берем и записываем полностью все показатели Нашего всего приложения в течение определенного времени Также есть а вкладочка с ограничениями можем это включать или не включать Определенные дни недели но допустим В некоторых случаях вы не можете себе позволить сделать их дам В то время как ваше приложение под слишком большой набор То есть вас даже устраивает его падение но лучше вы попробуете обслуживать Так можно большее количество пользователей Вот Значит это триллеры есть триггеры на Процессор Есть очень важный и я бы даже сказал более полезный Например чем процессоры это dead moket tracks То есть в принципе это Абсолютно правильная вещь то есть ничем больше у нас заблокированных потоков тем собственно Мы быстрее должны здесь реагировать на мой взгляд даже Макс триггер в не может быть 1 уже на самом деле является большим поводом для того чтобы По крайней мере с биоцентром Сказать что то не так Лайф сет У нас относятся к памяти на то есть сколько у нас в данном случае занимает Смотрите если на той же машине там прям много Мы то можем проверить смотрите вот бонус этого занятия что вы можете сами ответить на свой вопрос Потому что у вас есть Джава райан мишин контрол Открываю видео emben сервер И смотрим Ока нам вас тушат Она у нас кушает примерно Чуть больше сотни мегабайт оперативной памяти Ну и существенно на процессорном времени Ну уже меньше она как бы оптимизируется немножко но все равно То есть вот бонус этого занятия что вы можете сами ответить на свой вопрос сколько кушает Конечно на этом сервере не интересно именно поэтому я и сказал что нужно делать удаленное подключение Сколько сколько занимает интеркоммуникация по Джиммы к спорту честно говоря не скажу но не слишком заметно то есть не Если вы подключились к удаленной машине по gmx порту то скажем так но вряд ли это как то всерьез повлияет на работу вашего приложения это и Есть конечно разные ситуации есть есть есть приложение которое которые выжирают весь свой сетевой ресурс И в этом случае даже поджим экспорту подключиться невозможно Но это само по себе должно вас насторожить Вот то есть Если вы подключаетесь именно к удаленной машине поджмем экспорту в принципе сбор этой информации по крайней мере в режиме м вин сервера да то есть Когда вы просто смотрите но еще ничего не записываете В принципе является приемлемым Я бы не сказал что он совсем бесплатный но он приемлемый обычно не влияет на то что Ваше приложение другое дело это флайт рекорда влияние flight рекордера к сожалению по возможности конечно пытаются преодолевать Но действительно под флаг рекордером в приложении даже даже по удаленному климат спорту Периодически может себя чувствовать не очень хорошо Ну все равно это полезно то есть вы просто делаете некоторую Поправку на слайд рекордер и все равно у вас есть какая то картина Туач Значит лайфсет значит это слишком много Занял ваш ваш тип Да то есть слишком много оперативной памяти заняло ваше приложение Мониторинг datnlock tracks принципе глубокий tracksmass app устраивает и trad coul Потому что приложения периодически могут порождать потоки В любом количестве То есть тоже нас это интересует дополнительно есть у нас тут расширение для заблуджек сервера если кто то использует его В принципе вполне живой проектор И кстати при желании многие сервера Но в качестве там на веновские они выпускают свои Свои и вот имплементации таких вещей которые тоже можно аккуратно сюда Нельзя подписать то есть они Интегрируется с genex Ну можете скачать В принципе если хотите можем посмотреть и другой интерфейс Показатели мы смотрим одни и те же вы их найдете и в другом приложить Дальше Вкладочка системы Вкладочкой системы не особенно всегда вам полезно Можно посмотреть какие то настройки переменное окружение что полезно Вот бывает иногда И посмотреть настройки текущие на Jow машины и конкретного этого процессора Тоже тоже достаточно интересно бывает Вот наконец вот наша золотая вкладка manory вот это Пусть это и не насильно впечатляет Пусть это не сильно вас может впечатлить но это Весьма полезная Гладкая и на ее основе как раз таки можно понять очень очень многое Значит во 1 можно посмотреть на то как себя ведет процесс сборки мусора но так как мы сейчас не экспортируем память Мы его особенно не видим Поэтому давайте аккуратно это исправим Значит найдем наше приложение Сделаем тут интересную вещь Заведем тут Интер жар Стрелок И в каждом нашем потоке Да будем собственно нашу дату которую мы вычислили будем периодически в эту ашмату записывать Конечно полное варварство Правила Не надо так никогда делать Ну мы сделали Назовем ее Дэйт маф И соответственно в наш что вот этот мап Мы будем записывать соответственно ключ нашей операции И И пусть солдат Сделал опять некрасивую вещь Но получил удовольствие такое Запускаемся Подключаемся заново Вот уже Нас начинает использоваться память Открываю вкладочку мамари и вот что у нас получилось А получился у нас с вами своеобразный ну запланированный вами релиз На самом деле это не может считаться прям на великом в классическом виде Но у нас получилась огромная область памяти которая по факту Не будет освобождена вашим В приложении до его завершения Соответственно мы это можем сразу увидеть по показателям нашей Куча мы видим что у нас во 1 очень большой тут иден спейс Ну мы еще будем говориться на сборке мусора что это такое но это тоже само по себе не очень хорошо Потому что И вообще у нас тут Свайвл спэйс тоже смешиваю тоже достаточно Сплотируется что это означает это означает что у нас и здесь во 1 перегружен ну то есть если вы заходите вот в эту вкладочку то И вы видите что в принципе у вас не меняется принципиально 35 на Во сколько положение дел по сборке мусора То это уже должно вас насторожить то есть цифры здесь должны по идее постоянно меняться + вы можете увидеть сколько вообще вы тратите на сборку мы видим что мало А pess cavenge У нас ну достаточно умный достаточно нехороший Вот И самое главное у нас активно эксплуатируется 1 из sevarles pace Само по себе не очень хорошо потому что он очень активно наблюдается карточка лектора Мы с вами об этом будем разговаривать завтра Вот И соответственно У вас грузится от этого еще и процессор То есть мало того что мы заняли память Так мы ее еще заняли наиболее неприятным и неудобным способом то есть если бы условно говоря Купить мегабайтики у нас Перетекли в ролген Ну на каком то этапе нас это бы устроило но я специально написал код который постоянно Постоянно кушать Наш наше Наши бейты И таким образом постоянно держит в нашем извиняющемся Состояние и вот как минимум вот такая вот вещь вот такая вот палочка должна вас уже насторожить Понятно на разных приложениях в разном оклерная наташа Но минимум вот это уже не очень хорошо То что происходит вот Значок но и собственно смотрим тоже на gacy time оно кстати у нас эти почти Я знаю Растет total horightson time 22 недели секунды Теперь на кстати был 5 сборок Что кстати не очень много Что тоже говорит о том что у нас Не совсем хорошие дела Творят сейчас приложение Вот то есть это уже достаточно полезная вкладка по крайней мере как наша реакция на то Какие то проблемы дальше вкладочка trads Ладожка трекс Показывает нам текущее положение наших трудов на самом деле Именно вот эта платка она иногда позволяет просто творить чудеса Избавляет находите места где У нас стартуют Наши правила при этом давайте включим вкладочки Полупрофайлинг dead not Детлок детекшн и алакейшн Тоже очень очень полезно Привет Ну а тотал cpu usuge Что опять закончилось Нет Странно почему в тот У йюс еще у нас внутри Так ты должна быть Не не глядеться Ну хотя бы тише а вот есть Твэйтинг твитинг а понятно они друг друга заблокировали на В чем намертво Тоже кстати тоже кстати интересный момент Сейчас предстоит давайте отсортируем У нас потоки друг друга начисто заблокировали несмотря на конкарных и шматку у нас чистота записи такая что они постоянно спорят За нее То есть у нас по факту в приложении сейчас даже не движется работа Потому что все наши Находится в составе Значит это уже 1 вкладка с которой вы можете начать собственно диагностику то есть до этого до Был просто повод для памяти ой ой ой я увидел плохие какие то показатели но Да давайте сейчас что то с ними сделаем значит аналогично вопрос что ответа пока не было здесь вы можете лично есть почему Потому что мы видим как минимум место откуда этот поток заранился То есть здесь уже у нас 1 1 вот этот плавный переход от собственно проблемного ресурса к проблемному месту потому Это самое важное в профайле Ванс профайлинги принципиально в общем то но обычно так понятно что что то идет не так приложение тормозит Пользователи ругаются саппорт саппорт добиться ничего хорошего не происходит то Значит вам этого на самом деле недостаточно Суть профайленда Не в том чтобы поверить какие то плохие показатели суть профайлинга Заключается в том что Чтобы найти место Откуда идет проблема вот здесь да пусть даже в таком виде пусть достаточно примитивном виде давайте вот откроют другие какие то Другие какие то части и будут Для не это в некоторых случаях приходится вот это колесико крутить прям до упора но Но все равно На вы видите по крайней мере место откуда заранулся ваш проблемный поток то есть вы уже можете открыть по сути исход код Зайти вот в этот вот майн ран и как минимум посмотреть что там такого не сделать Значит лайф трек граф я честно говоря не особенно люблю он не очень много что то показывает Количество живых потоков еще часто полезно у нас обращать на вкладочку allocation Бывает Тот практически каждый поток у нас на себя скушал важного полтора мегабайта Что собственно тоже не очень красиво я вам подскажу что это Это по сути те те данные которые ожидаются в флэш сейчас отправки в маты Но это тоже недостаточно скажем так И у нас история Вот То есть здесь Мне мало видеть занятые байты мне хочется понять что их заняло Кстати а еще часть ответа на ваши на ваш вопрос а сколько занимает renacon Вот примерная цифра Блокет кант сколько раз он был заблокирован И вот ответы на ваш вопрос вот remai connection В данном случае кушаем примерно 1 и 3 процессорного времени при том что уже не самая точная машина и будет столько байт Она периодически растет и сбрасывается то есть она там растет до определенных размеров но все равно это копей согласитесь для вашего приложения В общем здесь мы уже потихонечку подошли к нашей цели цель профайлен еще раз говорю найти проблемное место не в том чтобы померить И там Орвать себе волосы Значит давайте я перезапущу приложение и И теперь мы его по мере вживую то есть мы Не будем просто за ним наблюдать мы возьмем с него слепок Значит для того чтобы А значит Это запустилось нам нужно нам нужно наша Приложение запустить с 2 флагами Лайт рекордер Я боюсь ошибиться просто потому что они довольно придирчивы в названии поэтому я по честному считаю Я считаю его гуглю Вот Сейчас я потому что боюсь ошибиться потому что малейшая ошибка в флаге и у вас приложение просто Не рано это вот она Нас интересует вот эти 2 флага Я вам сейчас скину их в чате Анлок камешек иф лайт рекорд Значит как их вставить в приложение у вас есть вкладочка main значит значит едет конфигурейшн Мейн конфигурация тут есть строчка vmotion Вот эти 2 флажка мы еще раз тогда на этот шток заработал флайт рекорд Перезапускаем наше приложение Великаны к чему но теперь открываем слайд рекорд И нажимаем на него 2 раза Мы он нас спрашивает Во 1 сколько времени ему записывать то есть ему записывать Конкретное время или использовать у нас Континенс рекординг да то есть до тех пор пока он не достиг определенного размера я поставлю медиссиму 10 секунд измерения на самом деле достаточно много для того чтобы понять что у нас произошло в приложении Нажимаем кнопочку next значит здесь также можно было бы сразу нажать нажать финиш но Меня интересует несколько показательный гарбочка электро оставляем нормал Компайнер detail это обязательно Это важно Метод сэмплин максимум Trade дам каждую каждые 10 секунд то есть в принципе на 1 раз хватит Хронизейшн прошел 10 секунд оставляем выставляем хип статистику собираем класс логин и собираем Это важно Костомные какие то элементы не делаем но давайте 11 Секунд Поехали Это же ваша удивительность запустится у вас в том случае Если вы Если вы сделали ее вашим действием на срабатывание триггера Вот и здесь у нас на самом деле конечно существенно больше информации Бог с ней с бабочкой дженерал тут ничего ничего принципиально нового для нас особенно не будет Разве что Данные о самом рекординге Иногда полезно посмотреть как он шел вообще Не принципиально А вот остальные вкладки нам чрезвычайно полезны каждую из них рассмотрим отдельно Видите здесь у нас с вами В полный комплект для того чтобы Успешно все делать значит 1 момент Значит Одарвью но иногда полезно посмотреть то есть что у нас у нас есть и мешал фикс прайс В принципе мы его не превысили это уже хорошо Было 4 сборки мусора не слишком долго Пока что но по крайней мере в течение записи Что у нас есть но историю про гарпич коллекшн мы с вами отложим до Через следующее занятие просто чтобы вы понимали что происходит то есть это это на самом деле Великолепно мощную вещь но мы ее посмотрим чуть попозже поэтому Мы эту вкладку пока пропускаем В голове ее держит также как досыпаемся и в конце конфигуришь Нас интересует алакейшнс Вот а вкладка анафишинс Уже для нашего шапочного разбора то в чем виноват и кто занял больше всего места она для нас очень очень полезна Значит general можно опять же пропустить нас интересует здесь подкладка allocation и mnutilup И здесь сразу Нам бросается в глаза Какой Какой объект занял больше всего места Джава тайм инста То есть это реальная информация о том чего было нехорошо в нашем приложении Я увидел Что объекты класса javatal instant Заняли большую часть большую часть нашего времени Основное давление на памяти 80% давление на память это Сказали эти вещи Уже хорошо но недостаточно Казалось бы ну хорошо да мы стали мыться но ведь оно может быть в каких угодно местах но И самое полезное и в чем основная суть профессии Ваенга В том что у вас есть ******** трейс И постепенно раскрывая Stectrace Вы выходите на конкретный метод В конкретном месте откуда это пошло и вот это самое ценное в профайлах Есть еще на ценность профайлора не в том чтобы взять и закричать все пропало Оценусь Файлера в том чтобы найти То место которое отжирает у нас ресурс И вот здесь Да в ряде случаев это раскрытие будет очень долгим Взлом всего 5 шагов В некотором случае в некотором случае будет будет существенно дольше так или иначе Мы найдем Место Именно нашего пользовательского кода Где это где это было за Лоцировать и вот это уже очень полезно то есть можно зайти в то конкретное место и уже посмотреть Действительно ли нам нужно Делать инстон нао каждый раз Может быть нам имеет смысл сделать допустим какой то 1 потоп Который будет обновлять instant now Его тогда использовать как думаете сколько памяти можем сэкономить в итоге Это как раз таки влияние данного Там данных объектов данного класса На вашу память Как в реальном коде найти это место Делаете флайт рекординг Или любой другой рекординг на любом другом профайлере я в джип профайлере Постараюсь спицами тоже указать Делаете флайт рекординг 5 300 потоков 1 63 ГБ откушенных в полне Да то есть это вещи которые же умножаются Находите инством и начинаете раскрывать Да в реальном коде это будет подольше Вы найдете это место Окей Давайте проведем наглядную оптимизацию У нас есть Ну понятно оптимизация будет конечно такая спорная Но тем не менее Заведем То это просто как пример Понятно что это это далеко от реальных От реальных действий тем не менее Инстант Ау по каналу Сделаем здесь еще 1 трек Кред тай Ее На уинстон Просто сделали еще 1 поток Который будет Эту историю Замедлять Понятно что это может быть не самое идеальное решение просто как Метод принятия решения вот я нашел Вижу постоянно перезаводит сынстан Почему бы не попробовать сделать хотя бы так Вместо 1 вместо системы вызова 100 500 потоках Используем 1 нал инстнт Проверим помогло ли Понятно пример абсолютно суррогатный но тем не менее показательный Здрасте если придется еще раз перезапустить вклады в corder Значит а делается все cont next Настрой сохранились поехали Пошел ты открываем мемори Алакейшнс Ок видим что изменилась наша ситуация видите Переехала наша наша затрата памяти в java youtube day Да То есть как минимум у нас изменилась ситуация то есть у нас проблема на instamp no она ушла на самом деле это тоже достаточно достаточно показательные истории наша наша наша типа оптимизация сделала хуже Это бывает это не значит что надо останавливаться там Вот это на опускать руки Да а почему потому что мы видели да окей мы убрали instant now но у нас теперь Да и ты начала отжимать Окей Возвращаемся мы люди упертые Не понимаем что вообще говоря Текущая дата Как бы вполне себе тоже тоже поддается вычислению Соответственно заводим Правила цитатипа Да и это кстати То как чаще всего все все наши организации заканчиваются Я что то попробовал сделать получилось то похоже ой я наверное ничего не умею И не буду этим больше никогда заниматься Нам мы не сдадимся Налтэит Оно Не знал Да да Теперь давай 6 я же говорю хуже стало и должно было Сейчас вот смотрите я внес новое изменение А вы мне в частную написали если что Значит перезапускаем флайт рекордер Интересно Честно говоря я такую ошибку 1 раз вижу попробую вам В следующем уроке помладше потому что на рекорде будет часто Ок ок Ну уже легче да то есть смотрите у нас уже получилось теперь java lank interger Начала видать то есть но в принципе я то из за того что у нас потом Мышка немножко по другому блокируется Но суть Суть такая да что мы нашли с вами некоторое проблемное место Внесли в него определенные изменения И получили собственное изменение наших показателей это и есть постепенный процесс организации ну тут надо дальше смотреть Что у нас С инфошарами Получается Так далее да то ну я думаю что вот на этом показатели можем уже Можем по идее даже остановиться потому что сентиментальные ничего сделать не можем с вами Значит уже уже есть определенные вейли то есть мы нашли некоторые классы которые отжирают больше Нашли конкретное место в котором отжирается и по своему мнению как то поправить Если нас не устраивает alitishion big lass иногда вот пишем big lass вообще говоря Не особенно бывает полезным Час интересно просто откуда у нас тут Оно это тайна уже запускается Значит периодически нас не особенно устраивает Понимание того как у нас Все по классам распределено Нас нас периодически интересует То же самое распределение по тредам Но здесь у нас тренды Кушаю более менее равномерно Кстати интересно мы с вами по факту убрали Вообще любые составляющие кроме системных То есть у нас осталась только система составляющая Вот И при желании можно посмотреть avation profile То есть это это их Еще подробнее Что на что отъелось Единственное смотрите нужно смотреть ну аутсайд тилаб Нас тоже иногда бывает интересует Значит будем еще с вами разбираться со структурой памяти джау машины Ну вот на самом деле тоже периодически на эту вещь тоже бывает важно смотреть Смотреть пусть и не так сильно Ну чаще всего Конечно у нас Нас интересовали толокишин и ньютева Есть еще оджик статистикс Не столь полезная история но она как то получше выглядит мор но тут можно как то просто Например по инстансам как то пофильтровать Переживаю вино уже менее полезно конечно самое полезное во флэт рекордере это вкладочка лакишница Значит вкладочка код не вполне бесполезно как может изначально показаться потому что Есть такая вещь как хот методс Опять же посмотреть какие методы у вас Являются наиболее горячими для вашего приложения Это тоже весьма полезно то есть опять же смотрите вот это тоже очень важно для дальнейшей оптимизации то есть Вы можете найти в приложении 1000000000 Плохо сделанных методов которые не оптимальна работа Которые нарушают Не скажем так правильную канону но если Они не являются горячими в принципе вас это не всегда волнует То есть если мы увидели какой то плохой метод проверьте по крайней мере является ли он Вот находится ли он тут в этом списке И как часто ему делают Также полезные вещи кол 3 Позволяет нам собственно Вот жена Тоже смотрите что откуда называлось понятно при более сложном ходе Бывает полезно Но их сапшим мы не кидали Здесь никаким образом Которые наиболее часто называются То есть Фотметас Попадают собственные методы которые чаще всего вызываются это не относится Там 3 образования которые делает джам машину я понимаю о чем она но это не суть важно Компилишн Мои коллеги которые там пишут всякие интересные инструментарии на декоративных языках На эту вкладочку смотрят Нам она не особенно интересна В кроссворде но тоже с Тоже обычно сложно А что то перегрузить кроссоверами Который ждет чего то откуда то где то это в тедах сейчас будем смотреть Значит вот третс Опять же хот трэц Ну у нас особо ход тедов нет хотя вот нас как посчитали что 3 3 из наших 100 потоков они как то горячее остальных видимо по случайному распределению у них у них А чаще всего доставалось внимание процессу Значит опять же для ход трендов смотрите обязательно спектра есть ваша ваша основная вкладка step tracks То есть вы всегда должны выходить на контуры Вот значит контентшен это как раз таки вот борьба Но в данном случае бороться ему особо не за что Хотя давайте я сделаю так чтобы был контент Консоль Антеншин это борьба потоков за какое либо ресурсное Сегодня же выключим Ошибки сами На консоль Сейчас мы увидим Очень много контента Раз блин это надо синхронизацию Хотя не год год они в принципе То есть вот у нас пошла уже борьба наших потоков за консоли вывода Мы этого особенно не видим но мы потратили на это вот за 11 Секунду собственно наших замеров вы потратили 3 4 миллисекунды просто на Взаимное ожидание нашего принтстрема При этом вот этим 3 потоком на самом деле повезло меньше всего они ждали примерно Снимай дольше Вот как раз ваша басомная информация о том кто у вас Чего больше всего ждет Это в разрезе многопоточность В разрезе ввода вывода Опять же файл рид файл right но мы тут не делали записи и записи Из файлов Хотя есть у нас тут вот соки тритт Потому что есть gmx соединения Но оно не сильно что то То что то ест Ну вот тоже мы Скушали Определенное количество Времени Вот это только 1 часть про профайлинг на самом деле к профайлингу мы с вами будем углублять Обращаться в течение всей нашей работы мы еще далеко не все посмотрели Мы еще посмотрим с вами j профайлер Мы в этот раз его не успели посмотреть но мы с вами обязательно посмотрим Вот Соответственно для вас самое основное что нужно Извлечь из этого урока то есть как только мы видим просто какие то какие то жираемые нами ресурсы нам этого мало Для нас важно понять кто И где Их ест Кстати у нас обратили внимание Этот же ту стрим ну вот соответственно вот нашего наш и который пишется туда да пожалуйста Чар класс как бы джеральд но опять же чарк вас нам не особо говорит а вот к вам Джава ил принт спринт говорит нам очень много Вот кто нас тут кушает больше всех То есть всегда мы из Ресурса Выводим код который ест ресурсы В части памяти Части горячих методов Они кстати должны были сейчас измениться Да the string В частности и в части потоков И вот он вот он Собственно теперь на всех наших занятиях по данному курсу профайлер у нас будет открыт все Всегда Мы посмотрели только часть его возможностей будем теперь его использовать скажем так более Более направленным образом на следующем уроке Давайте начинаем говорить с вами про сборку мусора и потом исходя из знаний собственно О сборке мусора мы уже смотрим на данные Порфаллера под Под углом того что мы узнали о спорте Так Найти Крути вопросы Чек рафаэля 500 дом Кто наша прялка пока работает Так по данному уроку домашний у нас не планируется никакой Ну собственно поставьте j профайлер кто не поставил это я оставлю домашнюю работу Вот вот активируйте триал Если он кончился Вы знаете что делать Пожалуйста вопросы по сегодняшнему уроку если кто то что то формулирует напишите сначала знак вопроса в чат Я понимал что вас не будут ждать Пока вы что то спросите Можно голосом да Отключить У вас самовыключается Да добрый вечер добрый да да да Да я вот хотел задать вопрос такой из Практики профилирования Несколько лет назад Там приходилось этим плотно заниматься там профилировали Веб сферу естественно приложение которое на веб сфере крутилось Я помню что там получилась такая история что мы смотрели Методы которые Отнимают много ресурсов процессор там по процессору Процессор был узким местом Вот и там Практически все там топ был забит Какими то системными вещами Вот при этом Который был сложен чтобы понять Там было приложение которое Ну в частности по с ibm mq там взаимодействовала там активная была много интеграций в Работа была с распределенным кэшем тоже там сетевые вызовы И оптимизация сводилась к тому что мы Искали вот какие то там ну по сути там в районе там 1 2% Методы по рисунку которые вы 1 2% по ресурсам занимали вот методы из фраз Прикладного нашего кода Вот и вот там их оптимизировали Но при этом это не выносило какого то нет наоборот наоборот это существенное влияние оказывало Окей смотрите значит у нас есть профайлеры и профайлеры значит джей профайлер не просто так стоит 500$ Потому что в нем есть но на самом деле здесь тоже есть такие вещи ну допустим по горячим методам Да мы можем с вами делать фильтрацию То есть я здесь этого делать сейчас не особенно буду ну допустим вот по трейдам да то Как минимум я могу отсюда исключить Или наоборот посмотреть только свои пакеты ну то есть вот у меня есть там пакет моей организации Как минимум фредер я могу исключить Сразу то что ну не то чтобы мусор но на какие то Системные вещи я не могу все равно влиять Поэтому в некоторых вкладках нашего анализа к сожалению не везде Допустим по мемори здесь такой вкладки нет а в j профиле или есть Но в треках по крайней мере мы можем сделать фильтрацию и в этих случаях мы тоже с этим часто сталкивались Мы просто ставили фильтр ну тупо от своего пакета По классу и ставили фильтр вот своего пакета и уже концентрируясь только на это Это 1 половина от x 2 половина ответа вы совершенно правильно сказали что на самом деле оптимизация Ваших методов она очень часто может привести к тому что Какие то системные вещи которые казалось бы вот в этом всем на начали у вас достаточно много всего там отъедать они тоже улучшатся вместе с тем как вы его под оптимизируете свои собственные методы А здесь помогает извините да я если что Здесь помогает все таки прокликивание вот этих системных методов что все равно Если потратим на это время сейчас Да штука в том чтобы отследить вот эту связь Может эти системные они ж не просто так Я тут я тут раскопал классный артефакт Это зародыш Зародыш А бкн да Нашего крутого нашего крутого проекта я ему раскопал он тут еще это по моему День 3 или 5 Вот но просто более более реальное приложение Угу Сейчас я его запущу Сейчас Ну просто эту связь не всегда просто увидеть Но можно смотрите я сейчас я я просто подрублюсь к нему как более такому живому проекту тут просто будет много с прямого контекста Ну давай запускайся Да надо Ватсон В общем я сейчас подключусь просто как в каком нибудь Чего нибудь Ладно пока тут Просто когда вы видите какой то системный метод не винитесь его Прокликать в стрессе до конца По крайней мере если вы пользуетесь вот таким вот Вот такой истории На самом деле чаще всего если вам хватит терпения то вы там найдете свой метод то То есть не надо и не надо переживать если вы в начале там видите как Какой нибудь Системный контекст Да это не означает что он там только и присутствует да то есть вот у вас есть там Чар на чаркупилов Что казалось бы системнее некуда Это у нас кто это jummition control Но если я буду буду достаточно То есть вот это уже пакет Java мишин control то есть видите я так или иначе если мне хватает терпения докликать Я выхожу на него В платных профайлерах да как мы будем смотреть там джей профайлер на триалке Это будет лучше просто удобнее Так или иначе Вы на вы дойдете До своего контекста Если вы видите какой то системный контекст это не обязательно системный контекст это вполне возможно ваши методы Просто надо не полениться по ним дальше поискать Да еще вопрос вот и там я насколько помню 2 типа профайлеров Есть там сэмплирующий профайл и еще какой то вот Я помню что с этим тоже были какие то нюансы Ну в профайлере есть сэндлер В профайлере реге сентлер из него тоже можно вытягивать его Определенную полезность но мы пока в это не будем сильно погружаться если что я сам потом покажу он А джем рафаэля там тоже есть Там я помню штук в том что вот там 2 подхода либо там с определенной периодичностью снимать делать снимки в Вот либо некие там инжекшены делать по коду и там уже замерять Это и есть центр Семпер это инжекшн или это вот снимки вот вот умеет вот вот имеет существенное значение играет вот из вашей практики я честно говоря мне и без И без инжекшнов а профанлеры дают допущенную информацию сколько Что ее нужно что ее нужно еще как то обработать то есть мне обычно необычно честно говоря этим Не не пользовался но такая функция есть да да да вот Такая функция есть Вот и она собственно может быть полезна в некоторых случаях но вначале я посоветовал все таки освоить Базовую информацию которую дает вам Которую дает вам собственно Базовый интерфейс вашего профайл Штука в том что они там разные результаты давали Вот вот эти 2 режима И там Вот этот инструментирующий По моему гораздо более Точную картину нам давала и мы там Вот из нее из него с ним смогли найти там ну оттуда я говорю говорю оттуда можно можно оттуда выжить определенное Дополнительное да ну в начале мы собственно займемся вот этим Потом если у нас останется время я покажу То есть я в принципе умею этим личным пользоваться Ну то есть вопрос если там какая то принципиальная там разница между ними или Есть конечно если вы делаете с джексом в отеле вы не делаете с джексом вот это достаточно большая разница То есть это вообще принципиально разный подход то есть либо вы вы вызываете по сути функции jvm Понятно что подходы разные вот либо либо либо вы чего то само заморачиваться Либо вы что то там спихиваете в код и пол идея собственно это вам тоже сильно замеряет это это сильно влияет и причем я бы не мог я не могу сказать что что то из этого лучше или хуже но То есть ну тут надо смотреть на на на на какие конкретно да то есть в некоторых случаях если у вас Но скажем так под Грубо говоря о маргарит мы чувствительны то внедрять в него еще какие то системные функции до выиграть в него там еще какой то код дополнительный да может быть очень хорошую идею так влияет на точную худшую сторону не Если же у вас код более фреймворковый то возможно внедрение кода наоборот даст вам большую точность чем вызов просто системных функций которые закроют это все А вот Ну вот туда вот Пишется мне то есть да Спасибо На самом деле вот было бы интересно как раз на каком то Реальном кейсе посмотреть как это потому что так вот Искусственном примере вроде все просто вот если берешь реальный кейс там какую нибудь веб сферу там сложнее разобраться кто ж нам даст могут вот я говорю я говорю я вот откопал специально для этого интенсива зародыш Древнего приложения но на самом деле оно оно не древнее сам зародыш да Больших моментов попробую на нем потому что сказать Я помню как раз таки я помню там было было много ошибок Вот будем их еще раз отправлять во 2 раз Спасибо Так еще вопросы вы сфера еще живет В банках В банках все Кто живет Некоторые вещи в банках Некоторые вещи в банках выживают просто очень долго Течь Окей все тогда всем спасибо всем до следующего занятия следующее занятие будет про сборку мусора До свидания Пожалуйста да