powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Stream и память
25 сообщений из 132, страница 1 из 6
Stream и память
    #40126085
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может кто то подсказать такой вопрос

Код: java
1.
2.
3.
4.
5.
6.
7.
 public long getSurveyResultInProgressCount(long surveyId) {
    return surveyResultIdentitiesPersistDelayedMap.keySet()
      .stream()
      .map(this::getCachedByIdentity)
      .filter(x -> x.getSurveyId() == surveyId)
      .count();
  }


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

вопрос простой на этапе вот этом

Код: java
1.
 .map(this::getCachedByIdentity)

мы получаем из кэша объекты - будут ли они все в памяти болтаться или же нет?

и если же будут целиком объекты то если мы возьмем их id только

например вот так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
 public long getSurveyResultInProgressCount(long surveyId) {
    return surveyResultIdentitiesPersistDelayedMap.keySet()
      .stream()
      .map(this::getCachedByIdentity)
      .map(SurveyResult::getSurveyId)
      .filter(x -> x == surveyId)
      .count();
  }
...
Рейтинг: 0 / 0
Stream и память
    #40126102
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep,
Вопрос переформулируй по взрослому.
...
Рейтинг: 0 / 0
Stream и память
    #40126103
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
adminDontSleep,
Вопрос переформулируй по взрослому.

что именно тебе не понятно в вопросе?
...
Рейтинг: 0 / 0
Stream и память
    #40126105
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep,
А) слово "болтаться"
Б) нет второго вопроса.
))))
...
Рейтинг: 0 / 0
Stream и память
    #40126108
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep,
Ну загрузились в память объекты. После использования сборщик все собрал.
Тебе то что?
Учитывая "преждевременная оптимизация зло!" можно спросить про твой термин "болтаться"))))
Ну а визуально первый кусок кода лучше и понятнее.
Тогда занафига ты портишь код?
...
Рейтинг: 0 / 0
Stream и память
    #40126109
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
adminDontSleep,
А) слово "болтаться"
Б) нет второго вопроса.
))))


смотри стрим начинается с получения из мапы кей сета - мы получаем множество UUID
по этим UUID мы достаем из кеша Объекты

далее мы преобразуем стрим из этих объектов в стрим идентификаторов


и далее фильтруем по неким условиям и считаем сумму элеметов в стриме

ворпос в том будут ли в памяти все время работы этого метода все Объекты которые мы выбрали из кеша?
...
Рейтинг: 0 / 0
Stream и память
    #40126111
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
adminDontSleep,
Ну загрузились в память объекты. После использования сборщик все собрал.
Тебе то что?
Учитывая "преждевременная оптимизация зло!" можно спросить про твой термин "болтаться"))))
Ну а визуально первый кусок кода лучше и понятнее.
Тогда занафига ты портишь код?


проблема в том что не хочется в память тащить такого количество объектов ,во первых они достаточно объемные и их очень много ,а хип не резиновый
поэтому и возник вопрос - если все время работы метода все объекты будут в хипе - то такое мне не подходит ,если же элемент после второго map будет кандидат на удаление - то это уже более интересно .Но я подозреваю что пока метод целиком не отработает на все этим элементы будут ссылки из стрима и хип раздуется ровно на количество этих элеентов - что мне конечно же не подходит
...
Рейтинг: 0 / 0
Stream и память
    #40126112
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep,
Тебе не сложно счас сгенерить стрим на 10млн?
Ты прошлый раз 5 страниц экономил память, а тормозила субд.
...
Рейтинг: 0 / 0
Stream и память
    #40126113
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, чего ты на парня набросился. Он вполне себе хороший вопрос задает.
И своевременный. Беспокоиться о ресурсах. Я вижу 2 варианта. Первое - найти в API
описание того как работает стрим-процессинг. И второе - мемори профайлер. И смотреть.
...
Рейтинг: 0 / 0
Stream и память
    #40126118
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот по 17-шке пишут.

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/package-summary.html

The key abstraction introduced in this package is stream. The classes Stream, IntStream, LongStream, and DoubleStream are streams over objects and the primitive int, long, and double types. Streams differ from collections in several ways:

No storage. A stream is not a data structure that stores elements; instead, it conveys elements from a source such as a data structure, an array, a generator function, or an I/O channel, through a pipeline of computational operations.
Functional in nature. An operation on a stream produces a result, but does not modify its source. For example, filtering a Stream obtained from a collection produces a new Stream without the filtered elements, rather than removing elements from the source collection.
Laziness-seeking. Many stream operations, such as filtering, mapping, or duplicate removal, can be implemented lazily, exposing opportunities for optimization. For example, "find the first String with three consecutive vowels" need not examine all the input strings. Stream operations are divided into intermediate (Stream-producing) operations and terminal (value- or side-effect-producing) operations. Intermediate operations are always lazy.
Possibly unbounded. While collections have a finite size, streams need not. Short-circuiting operations such as limit(n) or findFirst() can allow computations on infinite streams to complete in finite time.
Consumable. The elements of a stream are only visited once during the life of a stream. Like an Iterator, a new stream must be generated to revisit the same elements of the source.


Но я-бы использвал не keySet а .entrySet(). Вот какое-то у меня есть предчувствие что лучше брать тот итератор
который уже дан без лишних преобразований.

Код: java
1.
2.
3.
4.
 public long getSurveyResultInProgressCount(long surveyId) {
    return surveyResultIdentitiesPersistDelayedMap.entrySet()
    ....
  }
...
Рейтинг: 0 / 0
Stream и память
    #40126130
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Совсем нет.
Ты силен в алгоритмизации. Я в архитектуре.
Почему у нас должны быть одинаковые вопросы.
Я ставлю оценку за технику а ты за артистизм))))
Ты правда думаешь что надо переписать код?
...
Рейтинг: 0 / 0
Stream и память
    #40126133
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты чего градус повышаешь? Обсуждай код а не людей.
...
Рейтинг: 0 / 0
Stream и память
    #40126153
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot mayton#22420011]Вот по 17-шке пишут.

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/package-summary.html

The key abstraction introduced in this package is stream. The classes Stream, IntStream, LongStream, and DoubleStream are streams over objects and the primitive int, long, and double types. Streams differ from collections in several ways:

No storage. A stream is not a data structure that stores elements; instead, it conveys elements from a source such as a data structure, an array, a generator function, or an I/O channel, through a pipeline of computational operations.
Functional in nature. An operation on a stream produces a result, but does not modify its source. For example, filtering a Stream obtained from a collection produces a new Stream without the filtered elements, rather than removing elements from the source collection.
Laziness-seeking. Many stream operations, such as filtering, mapping, or duplicate removal, can be implemented lazily, exposing opportunities for optimization. For example, "find the first String with three consecutive vowels" need not examine all the input strings. Stream operations are divided into intermediate (Stream-producing) operations and terminal (value- or side-effect-producing) operations. Intermediate operations are always lazy.
Possibly unbounded. While collections have a finite size, streams need not. Short-circuiting operations such as limit(n) or findFirst() can allow computations on infinite streams to complete in finite time.
Consumable. The elements of a stream are only visited once during the life of a stream. Like an Iterator, a new stream must be generated to revisit the same elements of the source.


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

проверять я конечно проверю- но может быть кто то знает и сталкивался с этим
...
Рейтинг: 0 / 0
Stream и память
    #40126158
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Ты чего градус повышаешь? Обсуждай код а не людей.
ты только градусы видишь. Я столько фактов выше привел.
Пусть ТС сделает тест что кончилась память.
Это же разумно?
Тебе некуда же бежать и спешить?
Верно?
Я именно это просил ТС.
...
Рейтинг: 0 / 0
Stream и память
    #40126161
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
мой вопрос простой
мой тоже. Он из жизни.
"ТС работает больше отвечающих" (с)
...
Рейтинг: 0 / 0
Stream и память
    #40126166
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep

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

проверять я конечно проверю- но может быть кто то знает и сталкивался с этим

В данной реализации мы просто пробегаем по коллекции ключей. Которые уже расположены в heap.

Если верить документации то stream не создает дополнительных коллекций до тех пор пока ты сам явно
об этом не попросишь в методе Collect например.


P.S. Немного напрягает твоя терминология. Ты говоришь "кеш". Это потому что ты его так назвал? Или
под интерфейсом Map у тебя скрыта реализация EhCache или чего-то подобного?
...
Рейтинг: 0 / 0
Stream и память
    #40126170
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
+1
Про кеш верно.
Если это кеш1 то мы рожаем объект из бд в оперативке из бд,
Если это кеш2 то мы пробегаем по объектам.
Если...
Гадание гадалок а не программистов.
...
Рейтинг: 0 / 0
Stream и память
    #40126207
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
adminDontSleep

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

проверять я конечно проверю- но может быть кто то знает и сталкивался с этим

В данной реализации мы просто пробегаем по коллекции ключей. Которые уже расположены в heap.

Если верить документации то stream не создает дополнительных коллекций до тех пор пока ты сам явно
об этом не попросишь в методе Collect например.


P.S. Немного напрягает твоя терминология. Ты говоришь "кеш". Это потому что ты его так назвал? Или
под интерфейсом Map у тебя скрыта реализация EhCache или чего-то подобного?

кеш в данном случае это хезель каст
...
Рейтинг: 0 / 0
Stream и память
    #40126209
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
хезель
ну он же настраивается. Меньше памяти жрать или больше.
mayton верно же сказал. Если все в кеше в оперативке, то память не меняется в методе.
Тяжело выбросить в лог замер по памяти?
...
Рейтинг: 0 / 0
Stream и память
    #40126210
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как то, смотрим свой код но абсолютно ничего не делаем.
...
Рейтинг: 0 / 0
Stream и память
    #40126226
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
mayton
пропущено...

В данной реализации мы просто пробегаем по коллекции ключей. Которые уже расположены в heap.

Если верить документации то stream не создает дополнительных коллекций до тех пор пока ты сам явно
об этом не попросишь в методе Collect например.


P.S. Немного напрягает твоя терминология. Ты говоришь "кеш". Это потому что ты его так назвал? Или
под интерфейсом Map у тебя скрыта реализация EhCache или чего-то подобного?

кеш в данном случае это хезель каст

А Hazelcast в данном случае является главным источником данных? Или он просто является слоем перед DBMS?
...
Рейтинг: 0 / 0
Stream и память
    #40126227
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
adminDontSleep
хезель
ну он же настраивается. Меньше памяти жрать или больше.
mayton верно же сказал. Если все в кеше в оперативке, то память не меняется в методе.
Тяжело выбросить в лог замер по памяти?

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

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

если есть кто не согласен с этим - прошу к дискуссии
...
Рейтинг: 0 / 0
Stream и память
    #40126228
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
проблема в том что не хочется в память тащить такого количество объектов ,во первых они достаточно объемные и их очень много ,а хип не резиновый
Проблема совсем в другом.
Есть "объект" и "данные объекта".
"Объект" это "указатель на данные объекта и сами данные" (они могут храниться раздельно) или "указатель на (другой) объект".
Если объект это какой-нибудь Long, то указатель на данные объекта будет больше, чем сами данные.
Если объект это какой-нибудь байтовый буфер на пару килобайт, то указатель на данные объекта - пренебрежимо мал.
Так вот - данные объекта не копируются, если вы специально этим не озаботились.
...
Рейтинг: 0 / 0
Stream и память
    #40126229
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
adminDontSleep
пропущено...

кеш в данном случае это хезель каст

А Hazelcast в данном случае является главным источником данных? Или он просто является слоем перед DBMS?

в данном случае хезель является источником правды и можно тоже самое сделать средствами хезелькаста и на стороне хезелькаста не затаскивая в хип лишние данные.

Но я повторюсь - меня интересует как будет огранизована работа памяти в данной цепочке

колекция UUID -по ней получаем из кэша- стрим объектов - мапим в стрим других объектов( например в лонги) фильтруем и считаем количество элементов

вот на каждом этом этапе интересует поведение памяти
...
Рейтинг: 0 / 0
Stream и память
    #40126231
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
adminDontSleep
проблема в том что не хочется в память тащить такого количество объектов ,во первых они достаточно объемные и их очень много ,а хип не резиновый
Проблема совсем в другом.
Есть "объект" и "данные объекта".
"Объект" это "указатель на данные объекта и сами данные" (они могут храниться раздельно) или "указатель на (другой) объект".
Если объект это какой-нибудь Long, то указатель на данные объекта будет больше, чем сами данные.
Если объект это какой-нибудь байтовый буфер на пару килобайт, то указатель на данные объекта - пренебрежимо мал.
Так вот - данные объекта не копируются, если вы специально этим не озаботились.

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


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