powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Stream и память
25 сообщений из 132, страница 5 из 6
Stream и память
    #40126971
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
ну и да я пытаюсь везде экономить и бороться за максимальную производительность
у меня например instaceOf ревью не пройдет

Тут пишут, что особых проблем с instanceOf нет.
...
Рейтинг: 0 / 0
Stream и память
    #40126994
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
теперь ты гораздо ближе к истине ,но count() это терминальная операция
Замените условный count на условный filter, но ваши вольные интерпретации так и останутся вольными интерпретациями.

P.S.
Я даже больше скажу - сборщик мусора не обязан начинать работу, когда накоплен условный гигабайт мусора, но свободно ещё условных десять гигабайт для кучи.
...
Рейтинг: 0 / 0
Stream и память
    #40127025
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan
Ты можешь еще раз конкретно написать два предложение: первое - что сказали местные снобы, второе - в чем они не правы. Конкретно какое представление говорят они и какое верное?
+1
Как сказал бы препод ВУЗа: "в чем предмет спора?"
...
Рейтинг: 0 / 0
Stream и память
    #40127050
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
adminDontSleep

гц работает гребенкой ,утечки памяти нет ,гц работает - но надо отметить что хип забивается целиком ,тоесть как я выше и писал не все так просто и однозначно

Расскажи как ты себе понимаешь "утечку памяти".

утечка памяти это нарастание хипа + нет очистики от ГЦ - что указывает ,что на объкты в куче все еще есть ссылки
...
Рейтинг: 0 / 0
Stream и память
    #40127052
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
faustgreen
adminDontSleep
ну и да я пытаюсь везде экономить и бороться за максимальную производительность
у меня например instaceOf ревью не пройдет

Тут пишут, что особых проблем с instanceOf нет.

давно ли стак стал истиной в последней инстанции?
запомни если у тебя в ООП модели где то закрался instanceOf ты уже проиграл эту битву- почему - попытайся понять сам
...
Рейтинг: 0 / 0
Stream и память
    #40127058
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
adminDontSleep
теперь ты гораздо ближе к истине ,но count() это терминальная операция
Замените условный count на условный filter, но ваши вольные интерпретации так и останутся вольными интерпретациями.

P.S.
Я даже больше скажу - сборщик мусора не обязан начинать работу, когда накоплен условный гигабайт мусора, но свободно ещё условных десять гигабайт для кучи.

я тебе привел один и тот же стрим с разными терминалками и ты все равно как упертый продолжаешь твердить одно и тоже- очвеидно что count() вызывает распухание в два раза большее ,чем поэлементная терминалка- о чем это говорит додумай сам
но ладно я тебе помогу - я уменьшил хип немного ,запустил в два потока и на count() словил OOM
теже вводные но мерминалка forEach () - OOM не произошло

дальше будешь спорить?
тоесть очевидно что ты явно не понимаешь как работают терминалки и стримы
...
Рейтинг: 0 / 0
Stream и память
    #40127059
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SpringMan
adminDontSleep

да какие обиды если ты сделал выводы не удосужившись почитать последние посты- я привел два графика с одним и тем же стримом но разными терминальными операциями - чтобы доказать местным снобам- что память жвм имеет немного иное представление - чем они тут пишут

К сожалению я прочитал эти посты, и повторю еще раз - и графики и выводы полная фигня. Ты можешь еще раз конкретно написать два предложение: первое - что сказали местные снобы, второе - в чем они не правы. Конкретно какое представление говорят они и какое верное?
У тебя графики за разные интервалы времени, не выставлен xmx, внутри forEach стоит System.out::println - хотя бы из-за этого твои картинки не имеют никакого смысла. После того как ты это исправишь, еще можешь рассказать как эти графики объясняют что-то про буферизацию/утечки/по элементные обработки - вот это будет самое интересное и смешное

хорошая попытка ,но нет,ты проиграл даже не попытавшись)
для тебя поясню еще раз абсолютно одинаковый код с разницей лишь в терминальной операции
поведение памяти ИНОЕ! там явно нет поэлеменнтых операций ,как утверждает фауст и базиль- там идет pull iteration и это явно прослеживается на графиках
собственно можно очень просто проверить - уменьшить хип и посмотреть будет ли OOM,если обработка стрима будет поэлементая - то мы никогда не получим ООМ,и мы таки получим ООМ если гц по не сможет убирать объекты
собственно я это и воспроизвел- на терминальке count() получил out of memory - казалось бы почему? ведь вы товарищи утверждаете ,что элемент стрима - обработан и вуаля - его можно убирать гц)
...
Рейтинг: 0 / 0
Stream и память
    #40127061
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
adminDontSleep
теперь ты гораздо ближе к истине ,но count() это терминальная операция
Замените условный count на условный filter, но ваши вольные интерпретации так и останутся вольными интерпретациями.

P.S.
Я даже больше скажу - сборщик мусора не обязан начинать работу, когда накоплен условный гигабайт мусора, но свободно ещё условных десять гигабайт для кучи.

а что ты скажешь на ООМ?))
где то неувязка в твоей теории...
...
Рейтинг: 0 / 0
Stream и память
    #40127062
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.
package tst;

import java.util.stream.LongStream;

public class StreamPsvm {
    public static class Employee {
        private Long id;

        public Employee(Long id) {
            this.id = id;
        }

        public Long getId() {
            return id;
        }
    }

    public static void main(String[] args) {
        var sum = LongStream.range(0, Long.MAX_VALUE)
                .boxed()
                .map(Employee::new)
                .filter(x -> x.getId() % 2 == 0)
                .count();
        System.out.println(sum);
    }
}


Работает спокойно на -Xmx10M и никаких ООМ. Так что можешь не врать или показать свой пример запуска
...
Рейтинг: 0 / 0
Stream и память
    #40127071
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
package tst;

import java.util.stream.LongStream;

public class StreamPsvm {
    public static class Employee {
        private Long id;

        public Employee(Long id) {
            this.id = id;
        }

        public Long getId() {
            return id;
        }
    }

    public static void main(String[] args) {
        var sum = LongStream.range(0, Long.MAX_VALUE)
                .boxed()
                .map(Employee::new)
                .filter(x -> x.getId() % 2 == 0)
                .count();
        System.out.println(sum);
    }
}


Работает спокойно на -Xmx10M и никаких ООМ. Так что можешь не врать или показать свой пример запуска

где доказательства работы?просто пук в небо тут не пройдет- видео с параметрами запуска пожалуйста
...
Рейтинг: 0 / 0
Stream и память
    #40127077
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
adminDontSleep,
Все для тебя друг: https://drive.google.com/file/d/1KSX1EIaaY7Ta-OONk-K-yze5Pp5XBPiw/view?usp=sharing - только вначале скачай, а то онлайн не быстро воспроизводится.
Ну и в ответ покажи свое видео, всегде мечтал увидеть чудо, а тут такой случай попался. Давай хотя бы чтобы на мегабайт 200 упало с ООМ
...
Рейтинг: 0 / 0
Stream и память
    #40127084
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SpringMan
adminDontSleep,
Все для тебя друг: https://drive.google.com/file/d/1KSX1EIaaY7Ta-OONk-K-yze5Pp5XBPiw/view?usp=sharing - только вначале скачай, а то онлайн не быстро воспроизводится.
Ну и в ответ покажи свое видео, всегде мечтал увидеть чудо, а тут такой случай попался. Давай хотя бы чтобы на мегабайт 200 упало с ООМ

сделал так же -OOM нет-причем я запускал это в 4х потоках
тогда сорян- но у меня реально на тесте выскочил ООМ в прошлый раз причем xmx был 512 вроде

может изза друих процессов на компе ( я смотрел видос на ютубе) не хватило для гц и он не успел очистить

но признаю свою неправоту- видно что нет никаких проблем и гц все чистит- значит никакой буферизации у count() нет
причем не возниакиет проблем если этот код пустить в 4+ потоках - картина не меняется ,за исключениемм активновсти ГЦ

ну собвственно это я и хотел выяснить
...
Рейтинг: 0 / 0
Stream и память
    #40127089
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
mayton
пропущено...

Расскажи как ты себе понимаешь "утечку памяти".

утечка памяти это нарастание хипа + нет очистики от ГЦ - что указывает ,что на объкты в куче все еще есть ссылки

Верно. И разве у тебя есть такая проблема? По моему - нет.
...
Рейтинг: 0 / 0
Stream и память
    #40127090
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
adminDontSleep
пропущено...

утечка памяти это нарастание хипа + нет очистики от ГЦ - что указывает ,что на объкты в куче все еще есть ссылки

Верно. И разве у тебя есть такая проблема? По моему - нет.

ну я ее словил - надо вопроизвести как
но фактичеки выставив 10 м хипа я вижу что все оюъекты создаваемые успешно удаляются

меня изначально смутил тот факт что две разные теримнальные операции почему то в памяти выглядят по разному

я для себя предположил что count() применяется как батч- тоесть не поэлеменнто а некими пачками - посему в хипе некоторое время удреживается часть объектов и это бы было проблемой - так как если будет условно много потоков - то хип ляжет по ООМ- но такого не произошло - на мое удивление и это говорит о том,что мы не почувсвуем этот канут - если будем считать его в дажва процессе а не в хезель касте
...
Рейтинг: 0 / 0
Stream и память
    #40127091
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
mayton
пропущено...

Верно. И разве у тебя есть такая проблема? По моему - нет.

ну я ее словил - надо вопроизвести как
но фактичеки выставив 10 м хипа я вижу что все оюъекты создаваемые успешно удаляются

меня изначально смутил тот факт что две разные теримнальные операции почему то в памяти выглядят по разному

я для себя предположил что count() применяется как батч- тоесть не поэлеменнто а некими пачками - посему в хипе некоторое время удреживается часть объектов и это бы было проблемой - так как если будет условно много потоков - то хип ляжет по ООМ- но такого не произошло - на мое удивление и это говорит о том,что мы не почувсвуем этот канут - если будем считать его в дажва процессе а не в хезель касте

Ничего ты там не словил. Вот когда будет OutOfMemoryException - тогда и занимайся.
На графиках наблюдается обычная активность средное-статичтического java-приложения.
...
Рейтинг: 0 / 0
Stream и память
    #40127092
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
но признаю свою неправоту- видно что нет никаких проблем и гц все чистит
дык с первой страницы говорили.
Начинай с кода а не с говорильни и все будет ОК
...
Рейтинг: 0 / 0
Stream и память
    #40127093
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
adminDontSleep
что мы не почувсвуем этот канут - если будем считать его в дажва процессе а не в хезель касте

Обычно расчет идет на уровне БД, чтобы не пересылать по сети миллионы строк в java приложение - и обычно профит идет из-за этого. Где идет инкремент это уже мелочи на фоне затрат на сетевое взаимодействие
...
Рейтинг: 0 / 0
Stream и память
    #40127639
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SpringMan
adminDontSleep
что мы не почувсвуем этот канут - если будем считать его в дажва процессе а не в хезель касте

Обычно расчет идет на уровне БД, чтобы не пересылать по сети миллионы строк в java приложение - и обычно профит идет из-за этого. Где идет инкремент это уже мелочи на фоне затрат на сетевое взаимодействие

у нас в качестве бд пострегрс - и есть такой кейс где клиент очень плотно работает с данными - тоесть они где то в течении 10 -15 минут постоянно обновляются и выдаются клиенту- и бд ставноится бутылочным горлышком - и как нельзя лучше тут подошел хезель ,который процессит эту дату с временным гепом небольшим по истечении времени это все записывается в бд

все это хорошо ложится на много нод,так как хезель все это поддерживает

поэтому считать каунт в даннм конкретном случае мы из бд не можем - ибо в бд еще ничего не записано

почему уточнил что постгрес- потому что таже монго этот кейс отрабатывает без каких либо проблем
...
Рейтинг: 0 / 0
Stream и память
    #40127640
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton

Ничего ты там не словил. Вот когда будет OutOfMemoryException - тогда и занимайся.
На графиках наблюдается обычная активность средное-статичтического java-приложения.

я словил но без профайлера к сожалению, реально был OOM на count() и xmx был 512 старт с 256 на нескольких потоках выбил ООМ
причем это же тест объекты - чут толже Long ,в реальности там достаточно увесистые объекты и именно поэтому не хочется тащить это все в хип уповая на гц- да почистит - как мы выяснили - но при этом по графикам даже лайт объектов гц активность начинает уверернно кушат процессрное время
...
Рейтинг: 0 / 0
Stream и память
    #40127649
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
я словил
ссылку дай где словил.
Поэтому и 5 страниц топика.
...
Рейтинг: 0 / 0
Stream и память
    #40127699
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
mayton

Ничего ты там не словил. Вот когда будет OutOfMemoryException - тогда и занимайся.
На графиках наблюдается обычная активность средное-статичтического java-приложения.

я словил но без профайлера к сожалению, реально был OOM на count() и xmx был 512 старт с 256 на нескольких потоках выбил ООМ
причем это же тест объекты - чут толже Long ,в реальности там достаточно увесистые объекты и именно поэтому не хочется тащить это все в хип уповая на гц- да почистит - как мы выяснили - но при этом по графикам даже лайт объектов гц активность начинает уверернно кушат процессрное время

Запускай приложение с ключами

Код: java
1.
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/path ....



Воспроизводи ошибку снова. Прикладывай файл. Или если знаешь что делать - покажи какие там объекты
по количеству штук и по памяти (deep size).
...
Рейтинг: 0 / 0
Stream и память
    #40127820
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
adminDontSleep
пропущено...

я словил но без профайлера к сожалению, реально был OOM на count() и xmx был 512 старт с 256 на нескольких потоках выбил ООМ
причем это же тест объекты - чут толже Long ,в реальности там достаточно увесистые объекты и именно поэтому не хочется тащить это все в хип уповая на гц- да почистит - как мы выяснили - но при этом по графикам даже лайт объектов гц активность начинает уверернно кушат процессрное время

Запускай приложение с ключами

Код: java
1.
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/path ....



Воспроизводи ошибку снова. Прикладывай файл. Или если знаешь что делать - покажи какие там объекты
по количеству штук и по памяти (deep size).

на выходных погоняю ,сейчас работы много- но там помоему было что то около 19 млн Employee и где то столько же Long
...
Рейтинг: 0 / 0
Stream и память
    #40127840
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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Мб проверять)
...
Рейтинг: 0 / 0
Stream и память
    #40127842
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парень. Ну и 256Мб Xmx - это конечно верх жлобства. Щас самые мелкие виртуалки продаются начиная от 512 Мб.

Я не знаю что у тебя за задачи стоят но мне кажется надо эти цифры серъезно пересмотреть.
...
Рейтинг: 0 / 0
Stream и память
    #40127882
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Парень. Ну и 256Мб Xmx - это конечно верх жлобства. Щас самые мелкие виртуалки продаются начиная от 512 Мб.

Я не знаю что у тебя за задачи стоят но мне кажется надо эти цифры серъезно пересмотреть.

256 для теста я делал,так у меня стоит старт 2 верх 4
на проде понятно что больше - но как бы чем менее требователен код к ресурсам,тем я лучше себя чувсвую
...
Рейтинг: 0 / 0
25 сообщений из 132, страница 5 из 6
Форумы / Java [игнор отключен] [закрыт для гостей] / Stream и память
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]