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

Код: 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
12.01.2022, 20:00
    #40126102
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream и память
adminDontSleep,
Вопрос переформулируй по взрослому.
...
Рейтинг: 0 / 0
12.01.2022, 20:03
    #40126103
adminDontSleep
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream и память
PetroNotC Sharp
adminDontSleep,
Вопрос переформулируй по взрослому.

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


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

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


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

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


проблема в том что не хочется в память тащить такого количество объектов ,во первых они достаточно объемные и их очень много ,а хип не резиновый
поэтому и возник вопрос - если все время работы метода все объекты будут в хипе - то такое мне не подходит ,если же элемент после второго map будет кандидат на удаление - то это уже более интересно .Но я подозреваю что пока метод целиком не отработает на все этим элементы будут ссылки из стрима и хип раздуется ровно на количество этих элеентов - что мне конечно же не подходит
...
Рейтинг: 0 / 0
12.01.2022, 20:32
    #40126112
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream и память
adminDontSleep,
Тебе не сложно счас сгенерить стрим на 10млн?
Ты прошлый раз 5 страниц экономил память, а тормозила субд.
...
Рейтинг: 0 / 0
12.01.2022, 20:34
    #40126113
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream и память
PetroNotC Sharp, чего ты на парня набросился. Он вполне себе хороший вопрос задает.
И своевременный. Беспокоиться о ресурсах. Я вижу 2 варианта. Первое - найти в API
описание того как работает стрим-процессинг. И второе - мемори профайлер. И смотреть.
...
Рейтинг: 0 / 0
12.01.2022, 20:41
    #40126118
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream и память
Вот по 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
12.01.2022, 20:58
    #40126130
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream и память
mayton,
Совсем нет.
Ты силен в алгоритмизации. Я в архитектуре.
Почему у нас должны быть одинаковые вопросы.
Я ставлю оценку за технику а ты за артистизм))))
Ты правда думаешь что надо переписать код?
...
Рейтинг: 0 / 0
12.01.2022, 21:34
    #40126133
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream и память
Ты чего градус повышаешь? Обсуждай код а не людей.
...
Рейтинг: 0 / 0
12.01.2022, 22:25
    #40126153
adminDontSleep
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream и память
[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
12.01.2022, 22:49
    #40126158
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream и память
mayton
Ты чего градус повышаешь? Обсуждай код а не людей.
ты только градусы видишь. Я столько фактов выше привел.
Пусть ТС сделает тест что кончилась память.
Это же разумно?
Тебе некуда же бежать и спешить?
Верно?
Я именно это просил ТС.
...
Рейтинг: 0 / 0
12.01.2022, 22:50
    #40126161
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream и память
adminDontSleep
мой вопрос простой
мой тоже. Он из жизни.
"ТС работает больше отвечающих" (с)
...
Рейтинг: 0 / 0
12.01.2022, 23:08
    #40126166
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream и память
adminDontSleep

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

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

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

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


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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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