|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep ну и да я пытаюсь везде экономить и бороться за максимальную производительность у меня например instaceOf ревью не пройдет Тут пишут, что особых проблем с instanceOf нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 01:02 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep теперь ты гораздо ближе к истине ,но count() это терминальная операция P.S. Я даже больше скажу - сборщик мусора не обязан начинать работу, когда накоплен условный гигабайт мусора, но свободно ещё условных десять гигабайт для кучи. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 09:50 |
|
Stream и память
|
|||
---|---|---|---|
#18+
SpringMan Ты можешь еще раз конкретно написать два предложение: первое - что сказали местные снобы, второе - в чем они не правы. Конкретно какое представление говорят они и какое верное? Как сказал бы препод ВУЗа: "в чем предмет спора?" ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 14:03 |
|
Stream и память
|
|||
---|---|---|---|
#18+
mayton adminDontSleep гц работает гребенкой ,утечки памяти нет ,гц работает - но надо отметить что хип забивается целиком ,тоесть как я выше и писал не все так просто и однозначно Расскажи как ты себе понимаешь "утечку памяти". утечка памяти это нарастание хипа + нет очистики от ГЦ - что указывает ,что на объкты в куче все еще есть ссылки ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 18:17 |
|
Stream и память
|
|||
---|---|---|---|
#18+
faustgreen adminDontSleep ну и да я пытаюсь везде экономить и бороться за максимальную производительность у меня например instaceOf ревью не пройдет Тут пишут, что особых проблем с instanceOf нет. давно ли стак стал истиной в последней инстанции? запомни если у тебя в ООП модели где то закрался instanceOf ты уже проиграл эту битву- почему - попытайся понять сам ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 18:23 |
|
Stream и память
|
|||
---|---|---|---|
#18+
Basil A. Sidorov adminDontSleep теперь ты гораздо ближе к истине ,но count() это терминальная операция P.S. Я даже больше скажу - сборщик мусора не обязан начинать работу, когда накоплен условный гигабайт мусора, но свободно ещё условных десять гигабайт для кучи. я тебе привел один и тот же стрим с разными терминалками и ты все равно как упертый продолжаешь твердить одно и тоже- очвеидно что count() вызывает распухание в два раза большее ,чем поэлементная терминалка- о чем это говорит додумай сам но ладно я тебе помогу - я уменьшил хип немного ,запустил в два потока и на count() словил OOM теже вводные но мерминалка forEach () - OOM не произошло дальше будешь спорить? тоесть очевидно что ты явно не понимаешь как работают терминалки и стримы ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 18:51 |
|
Stream и память
|
|||
---|---|---|---|
#18+
SpringMan adminDontSleep да какие обиды если ты сделал выводы не удосужившись почитать последние посты- я привел два графика с одним и тем же стримом но разными терминальными операциями - чтобы доказать местным снобам- что память жвм имеет немного иное представление - чем они тут пишут К сожалению я прочитал эти посты, и повторю еще раз - и графики и выводы полная фигня. Ты можешь еще раз конкретно написать два предложение: первое - что сказали местные снобы, второе - в чем они не правы. Конкретно какое представление говорят они и какое верное? У тебя графики за разные интервалы времени, не выставлен xmx, внутри forEach стоит System.out::println - хотя бы из-за этого твои картинки не имеют никакого смысла. После того как ты это исправишь, еще можешь рассказать как эти графики объясняют что-то про буферизацию/утечки/по элементные обработки - вот это будет самое интересное и смешное хорошая попытка ,но нет,ты проиграл даже не попытавшись) для тебя поясню еще раз абсолютно одинаковый код с разницей лишь в терминальной операции поведение памяти ИНОЕ! там явно нет поэлеменнтых операций ,как утверждает фауст и базиль- там идет pull iteration и это явно прослеживается на графиках собственно можно очень просто проверить - уменьшить хип и посмотреть будет ли OOM,если обработка стрима будет поэлементая - то мы никогда не получим ООМ,и мы таки получим ООМ если гц по не сможет убирать объекты собственно я это и воспроизвел- на терминальке count() получил out of memory - казалось бы почему? ведь вы товарищи утверждаете ,что элемент стрима - обработан и вуаля - его можно убирать гц) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 19:02 |
|
Stream и память
|
|||
---|---|---|---|
#18+
Basil A. Sidorov adminDontSleep теперь ты гораздо ближе к истине ,но count() это терминальная операция P.S. Я даже больше скажу - сборщик мусора не обязан начинать работу, когда накоплен условный гигабайт мусора, но свободно ещё условных десять гигабайт для кучи. а что ты скажешь на ООМ?)) где то неувязка в твоей теории... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 19:03 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep хорошая попытка ,но нет,ты проиграл даже не попытавшись) для тебя поясню еще раз абсолютно одинаковый код с разницей лишь в терминальной операции поведение памяти ИНОЕ! Ты говоришь абстрактное ИНОЕ потому что не можешь сказать что-то конкретное без общих фраз или что? adminDontSleep собственно я это и воспроизвел- на терминальке count() получил out of memory - казалось бы почему? ведь вы товарищи утверждаете ,что элемент стрима - обработан и вуаля - его можно убирать гц) Ради тебя взял твой пример, на который ты ссылаешься: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Работает спокойно на -Xmx10M и никаких ООМ. Так что можешь не врать или показать свой пример запуска ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 19:13 |
|
Stream и память
|
|||
---|---|---|---|
#18+
SpringMan adminDontSleep хорошая попытка ,но нет,ты проиграл даже не попытавшись) для тебя поясню еще раз абсолютно одинаковый код с разницей лишь в терминальной операции поведение памяти ИНОЕ! Ты говоришь абстрактное ИНОЕ потому что не можешь сказать что-то конкретное без общих фраз или что? adminDontSleep собственно я это и воспроизвел- на терминальке count() получил out of memory - казалось бы почему? ведь вы товарищи утверждаете ,что элемент стрима - обработан и вуаля - его можно убирать гц) Ради тебя взял твой пример, на который ты ссылаешься: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Работает спокойно на -Xmx10M и никаких ООМ. Так что можешь не врать или показать свой пример запуска где доказательства работы?просто пук в небо тут не пройдет- видео с параметрами запуска пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 19:45 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep, Все для тебя друг: https://drive.google.com/file/d/1KSX1EIaaY7Ta-OONk-K-yze5Pp5XBPiw/view?usp=sharing - только вначале скачай, а то онлайн не быстро воспроизводится. Ну и в ответ покажи свое видео, всегде мечтал увидеть чудо, а тут такой случай попался. Давай хотя бы чтобы на мегабайт 200 упало с ООМ ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 20:32 |
|
Stream и память
|
|||
---|---|---|---|
#18+
SpringMan adminDontSleep, Все для тебя друг: https://drive.google.com/file/d/1KSX1EIaaY7Ta-OONk-K-yze5Pp5XBPiw/view?usp=sharing - только вначале скачай, а то онлайн не быстро воспроизводится. Ну и в ответ покажи свое видео, всегде мечтал увидеть чудо, а тут такой случай попался. Давай хотя бы чтобы на мегабайт 200 упало с ООМ сделал так же -OOM нет-причем я запускал это в 4х потоках тогда сорян- но у меня реально на тесте выскочил ООМ в прошлый раз причем xmx был 512 вроде может изза друих процессов на компе ( я смотрел видос на ютубе) не хватило для гц и он не успел очистить но признаю свою неправоту- видно что нет никаких проблем и гц все чистит- значит никакой буферизации у count() нет причем не возниакиет проблем если этот код пустить в 4+ потоках - картина не меняется ,за исключениемм активновсти ГЦ ну собвственно это я и хотел выяснить ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 20:59 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep mayton пропущено... Расскажи как ты себе понимаешь "утечку памяти". утечка памяти это нарастание хипа + нет очистики от ГЦ - что указывает ,что на объкты в куче все еще есть ссылки Верно. И разве у тебя есть такая проблема? По моему - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 21:17 |
|
Stream и память
|
|||
---|---|---|---|
#18+
mayton adminDontSleep пропущено... утечка памяти это нарастание хипа + нет очистики от ГЦ - что указывает ,что на объкты в куче все еще есть ссылки Верно. И разве у тебя есть такая проблема? По моему - нет. ну я ее словил - надо вопроизвести как но фактичеки выставив 10 м хипа я вижу что все оюъекты создаваемые успешно удаляются меня изначально смутил тот факт что две разные теримнальные операции почему то в памяти выглядят по разному я для себя предположил что count() применяется как батч- тоесть не поэлеменнто а некими пачками - посему в хипе некоторое время удреживается часть объектов и это бы было проблемой - так как если будет условно много потоков - то хип ляжет по ООМ- но такого не произошло - на мое удивление и это говорит о том,что мы не почувсвуем этот канут - если будем считать его в дажва процессе а не в хезель касте ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 21:32 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep mayton пропущено... Верно. И разве у тебя есть такая проблема? По моему - нет. ну я ее словил - надо вопроизвести как но фактичеки выставив 10 м хипа я вижу что все оюъекты создаваемые успешно удаляются меня изначально смутил тот факт что две разные теримнальные операции почему то в памяти выглядят по разному я для себя предположил что count() применяется как батч- тоесть не поэлеменнто а некими пачками - посему в хипе некоторое время удреживается часть объектов и это бы было проблемой - так как если будет условно много потоков - то хип ляжет по ООМ- но такого не произошло - на мое удивление и это говорит о том,что мы не почувсвуем этот канут - если будем считать его в дажва процессе а не в хезель касте Ничего ты там не словил. Вот когда будет OutOfMemoryException - тогда и занимайся. На графиках наблюдается обычная активность средное-статичтического java-приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 21:38 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep но признаю свою неправоту- видно что нет никаких проблем и гц все чистит Начинай с кода а не с говорильни и все будет ОК ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 21:41 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep что мы не почувсвуем этот канут - если будем считать его в дажва процессе а не в хезель касте Обычно расчет идет на уровне БД, чтобы не пересылать по сети миллионы строк в java приложение - и обычно профит идет из-за этого. Где идет инкремент это уже мелочи на фоне затрат на сетевое взаимодействие ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 21:48 |
|
Stream и память
|
|||
---|---|---|---|
#18+
SpringMan adminDontSleep что мы не почувсвуем этот канут - если будем считать его в дажва процессе а не в хезель касте Обычно расчет идет на уровне БД, чтобы не пересылать по сети миллионы строк в java приложение - и обычно профит идет из-за этого. Где идет инкремент это уже мелочи на фоне затрат на сетевое взаимодействие у нас в качестве бд пострегрс - и есть такой кейс где клиент очень плотно работает с данными - тоесть они где то в течении 10 -15 минут постоянно обновляются и выдаются клиенту- и бд ставноится бутылочным горлышком - и как нельзя лучше тут подошел хезель ,который процессит эту дату с временным гепом небольшим по истечении времени это все записывается в бд все это хорошо ложится на много нод,так как хезель все это поддерживает поэтому считать каунт в даннм конкретном случае мы из бд не можем - ибо в бд еще ничего не записано почему уточнил что постгрес- потому что таже монго этот кейс отрабатывает без каких либо проблем ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 01:37 |
|
Stream и память
|
|||
---|---|---|---|
#18+
mayton Ничего ты там не словил. Вот когда будет OutOfMemoryException - тогда и занимайся. На графиках наблюдается обычная активность средное-статичтического java-приложения. я словил но без профайлера к сожалению, реально был OOM на count() и xmx был 512 старт с 256 на нескольких потоках выбил ООМ причем это же тест объекты - чут толже Long ,в реальности там достаточно увесистые объекты и именно поэтому не хочется тащить это все в хип уповая на гц- да почистит - как мы выяснили - но при этом по графикам даже лайт объектов гц активность начинает уверернно кушат процессрное время ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 01:49 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep я словил Поэтому и 5 страниц топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 06:52 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep mayton Ничего ты там не словил. Вот когда будет OutOfMemoryException - тогда и занимайся. На графиках наблюдается обычная активность средное-статичтического java-приложения. я словил но без профайлера к сожалению, реально был OOM на count() и xmx был 512 старт с 256 на нескольких потоках выбил ООМ причем это же тест объекты - чут толже Long ,в реальности там достаточно увесистые объекты и именно поэтому не хочется тащить это все в хип уповая на гц- да почистит - как мы выяснили - но при этом по графикам даже лайт объектов гц активность начинает уверернно кушат процессрное время Запускай приложение с ключами Код: java 1.
Воспроизводи ошибку снова. Прикладывай файл. Или если знаешь что делать - покажи какие там объекты по количеству штук и по памяти (deep size). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 11:05 |
|
Stream и память
|
|||
---|---|---|---|
#18+
mayton adminDontSleep пропущено... я словил но без профайлера к сожалению, реально был OOM на count() и xmx был 512 старт с 256 на нескольких потоках выбил ООМ причем это же тест объекты - чут толже Long ,в реальности там достаточно увесистые объекты и именно поэтому не хочется тащить это все в хип уповая на гц- да почистит - как мы выяснили - но при этом по графикам даже лайт объектов гц активность начинает уверернно кушат процессрное время Запускай приложение с ключами Код: java 1.
Воспроизводи ошибку снова. Прикладывай файл. Или если знаешь что делать - покажи какие там объекты по количеству штук и по памяти (deep size). на выходных погоняю ,сейчас работы много- но там помоему было что то около 19 млн Employee и где то столько же Long ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 15:20 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep mayton Ничего ты там не словил. Вот когда будет OutOfMemoryException - тогда и занимайся. На графиках наблюдается обычная активность средное-статичтического java-приложения. я словил но без профайлера к сожалению, реально был OOM на count() и xmx был 512 старт с 256 на нескольких потоках выбил ООМ причем это же тест объекты - чут толже Long ,в реальности там достаточно увесистые объекты и именно поэтому не хочется тащить это все в хип уповая на гц- да почистит - как мы выяснили - но при этом по графикам даже лайт объектов гц активность начинает уверернно кушат процессрное время Прям целый набор взаимоисключающих параграфов. Не хочется активности ГЦ тогда не тащи данные в JVM просто спроси сразу число в том месте где данные хранятся те. БД. Никакого логического обоснования необходимости буферизации нет для count (именно с точки зрения count функции а не подтягивания данных в стрим). Если прям хочется скэкономить не тащи объект целиком, а лишь маркер его присутствия в heap. boolean isCacheServeyIdExistsByIdentity(); Вернутый Boolean можно подсчитать и booleans и так закэшированы в jvm. Даже больше если stream is sized то ответ count вернут сразу без даже какого либо каунтинга В примере выше все портит .filter(x -> x.getSurveyId() == surveyId превщает в unknown size stream, а это тащит .map(this::getCachedByIdentity) в heap. (вообще getCachedByIdentity как то стремно выглядет ведь map функция подразумевается конвертер данных т.е. даные и так в памяти и мы просто с ними оперируем а тут выглядет так что поддтягиваются данные из кэша, что и side effect может иметь и еще и блокинг при этом в стриме получить) Если нет возможности считать там где лежат данные и если повезло с surveyId и значения за диапазон небольшой не выходят, то пробуй не тащить целиком объект в head а тащи только getCachedSurveryIdByIdenity()) и проставь -XX:AutoBoxCacheMax ну например до 100тыс (если эти значения за 100тыс не выходят). adminDontSleep я словил но без профайлера к сожалению, реально был OOM на count() и xmx был 512 старт с 256 на нескольких потоках выбил ООМ больше похоже подправление кода и постоянный перезапуск, и одна из кривых версий кода хранила ссылки и получили OOM или RAM не осталось на машинке свободной прям в этот раз. но эта версия тут же была исправлена и теперь не вспомнить какая из версий кидала OOM. OOM можно получить если бомбить память быстрее чем GC успевает освобождать ее. решается круткой edem для краковременных объектов чтобы не успевали как old помечаться объекты (у меня на 60мб не успевает чистить эдем и все в old попадает но тут объем маленький GC и так с лихвой успевает 60Мб проверять) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 16:00 |
|
Stream и память
|
|||
---|---|---|---|
#18+
Парень. Ну и 256Мб Xmx - это конечно верх жлобства. Щас самые мелкие виртуалки продаются начиная от 512 Мб. Я не знаю что у тебя за задачи стоят но мне кажется надо эти цифры серъезно пересмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 16:01 |
|
Stream и память
|
|||
---|---|---|---|
#18+
mayton Парень. Ну и 256Мб Xmx - это конечно верх жлобства. Щас самые мелкие виртуалки продаются начиная от 512 Мб. Я не знаю что у тебя за задачи стоят но мне кажется надо эти цифры серъезно пересмотреть. 256 для теста я делал,так у меня стоит старт 2 верх 4 на проде понятно что больше - но как бы чем менее требователен код к ресурсам,тем я лучше себя чувсвую ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 18:10 |
|
|
start [/forum/topic.php?fid=59&msg=40127058&tid=2120265]: |
0ms |
get settings: |
17ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
23ms |
get topic data: |
4ms |
get forum data: |
1ms |
get page messages: |
452ms |
get tp. blocked users: |
1ms |
others: | 278ms |
total: | 783ms |
0 / 0 |