|
Stream и память
|
|||
---|---|---|---|
#18+
Может кто то подсказать такой вопрос Код: java 1. 2. 3. 4. 5. 6. 7.
например есть такой метод- что он делает - идет в кеш за мапой - берет коллекцию ключей-по этим ключам в кеше находит нужные объекты ,фильтрует и считает вопрос простой на этапе вот этом Код: java 1.
мы получаем из кэша объекты - будут ли они все в памяти болтаться или же нет? и если же будут целиком объекты то если мы возьмем их id только например вот так Код: java 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 19:12 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep, Вопрос переформулируй по взрослому. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 20:00 |
|
Stream и память
|
|||
---|---|---|---|
#18+
PetroNotC Sharp adminDontSleep, Вопрос переформулируй по взрослому. что именно тебе не понятно в вопросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 20:03 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep, А) слово "болтаться" Б) нет второго вопроса. )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 20:09 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep, Ну загрузились в память объекты. После использования сборщик все собрал. Тебе то что? Учитывая "преждевременная оптимизация зло!" можно спросить про твой термин "болтаться")))) Ну а визуально первый кусок кода лучше и понятнее. Тогда занафига ты портишь код? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 20:16 |
|
Stream и память
|
|||
---|---|---|---|
#18+
PetroNotC Sharp adminDontSleep, А) слово "болтаться" Б) нет второго вопроса. )))) смотри стрим начинается с получения из мапы кей сета - мы получаем множество UUID по этим UUID мы достаем из кеша Объекты далее мы преобразуем стрим из этих объектов в стрим идентификаторов и далее фильтруем по неким условиям и считаем сумму элеметов в стриме ворпос в том будут ли в памяти все время работы этого метода все Объекты которые мы выбрали из кеша? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 20:22 |
|
Stream и память
|
|||
---|---|---|---|
#18+
PetroNotC Sharp adminDontSleep, Ну загрузились в память объекты. После использования сборщик все собрал. Тебе то что? Учитывая "преждевременная оптимизация зло!" можно спросить про твой термин "болтаться")))) Ну а визуально первый кусок кода лучше и понятнее. Тогда занафига ты портишь код? проблема в том что не хочется в память тащить такого количество объектов ,во первых они достаточно объемные и их очень много ,а хип не резиновый поэтому и возник вопрос - если все время работы метода все объекты будут в хипе - то такое мне не подходит ,если же элемент после второго map будет кандидат на удаление - то это уже более интересно .Но я подозреваю что пока метод целиком не отработает на все этим элементы будут ссылки из стрима и хип раздуется ровно на количество этих элеентов - что мне конечно же не подходит ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 20:27 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep, Тебе не сложно счас сгенерить стрим на 10млн? Ты прошлый раз 5 страниц экономил память, а тормозила субд. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 20:32 |
|
Stream и память
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, чего ты на парня набросился. Он вполне себе хороший вопрос задает. И своевременный. Беспокоиться о ресурсах. Я вижу 2 варианта. Первое - найти в API описание того как работает стрим-процессинг. И второе - мемори профайлер. И смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 20:34 |
|
Stream и память
|
|||
---|---|---|---|
#18+
Вот по 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 20:41 |
|
Stream и память
|
|||
---|---|---|---|
#18+
mayton, Совсем нет. Ты силен в алгоритмизации. Я в архитектуре. Почему у нас должны быть одинаковые вопросы. Я ставлю оценку за технику а ты за артистизм)))) Ты правда думаешь что надо переписать код? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 20:58 |
|
Stream и память
|
|||
---|---|---|---|
#18+
Ты чего градус повышаешь? Обсуждай код а не людей. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 21:34 |
|
Stream и память
|
|||
---|---|---|---|
#18+
[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. все равно не очень понятно если я из кеша выбираю объекты - хранятся ли они где то или нет? тоесть первой операцией у нас идет получние ключей из мапы- тут все нормально - мапа уже в памяти - к ней ворпосов нет вопрос в том что я получаю далее стрим объектов - и преобразую его в стрим идентификаторов - и мой вопрос простой - что будет с объектами - которые я достал из кэша - будут ли они храниться в хипе пока метод не отработал либо же сразу после преобразования стрима объектов в стрим идентификаторов - объекты будут помечены на удаление проверять я конечно проверю- но может быть кто то знает и сталкивался с этим ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 22:25 |
|
Stream и память
|
|||
---|---|---|---|
#18+
mayton Ты чего градус повышаешь? Обсуждай код а не людей. Пусть ТС сделает тест что кончилась память. Это же разумно? Тебе некуда же бежать и спешить? Верно? Я именно это просил ТС. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 22:49 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep мой вопрос простой "ТС работает больше отвечающих" (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 22:50 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep все равно не очень понятно если я из кеша выбираю объекты - хранятся ли они где то или нет? тоесть первой операцией у нас идет получние ключей из мапы- тут все нормально - мапа уже в памяти - к ней ворпосов нет вопрос в том что я получаю далее стрим объектов - и преобразую его в стрим идентификаторов - и мой вопрос простой - что будет с объектами - которые я достал из кэша - будут ли они храниться в хипе пока метод не отработал либо же сразу после преобразования стрима объектов в стрим идентификаторов - объекты будут помечены на удаление проверять я конечно проверю- но может быть кто то знает и сталкивался с этим В данной реализации мы просто пробегаем по коллекции ключей. Которые уже расположены в heap. Если верить документации то stream не создает дополнительных коллекций до тех пор пока ты сам явно об этом не попросишь в методе Collect например. P.S. Немного напрягает твоя терминология. Ты говоришь "кеш". Это потому что ты его так назвал? Или под интерфейсом Map у тебя скрыта реализация EhCache или чего-то подобного? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 23:08 |
|
Stream и память
|
|||
---|---|---|---|
#18+
mayton, +1 Про кеш верно. Если это кеш1 то мы рожаем объект из бд в оперативке из бд, Если это кеш2 то мы пробегаем по объектам. Если... Гадание гадалок а не программистов. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 23:24 |
|
Stream и память
|
|||
---|---|---|---|
#18+
mayton adminDontSleep все равно не очень понятно если я из кеша выбираю объекты - хранятся ли они где то или нет? тоесть первой операцией у нас идет получние ключей из мапы- тут все нормально - мапа уже в памяти - к ней ворпосов нет вопрос в том что я получаю далее стрим объектов - и преобразую его в стрим идентификаторов - и мой вопрос простой - что будет с объектами - которые я достал из кэша - будут ли они храниться в хипе пока метод не отработал либо же сразу после преобразования стрима объектов в стрим идентификаторов - объекты будут помечены на удаление проверять я конечно проверю- но может быть кто то знает и сталкивался с этим В данной реализации мы просто пробегаем по коллекции ключей. Которые уже расположены в heap. Если верить документации то stream не создает дополнительных коллекций до тех пор пока ты сам явно об этом не попросишь в методе Collect например. P.S. Немного напрягает твоя терминология. Ты говоришь "кеш". Это потому что ты его так назвал? Или под интерфейсом Map у тебя скрыта реализация EhCache или чего-то подобного? кеш в данном случае это хезель каст ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 09:44 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep хезель mayton верно же сказал. Если все в кеше в оперативке, то память не меняется в методе. Тяжело выбросить в лог замер по памяти? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 09:51 |
|
Stream и память
|
|||
---|---|---|---|
#18+
Как то, смотрим свой код но абсолютно ничего не делаем. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 09:52 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep mayton пропущено... В данной реализации мы просто пробегаем по коллекции ключей. Которые уже расположены в heap. Если верить документации то stream не создает дополнительных коллекций до тех пор пока ты сам явно об этом не попросишь в методе Collect например. P.S. Немного напрягает твоя терминология. Ты говоришь "кеш". Это потому что ты его так назвал? Или под интерфейсом Map у тебя скрыта реализация EhCache или чего-то подобного? кеш в данном случае это хезель каст А Hazelcast в данном случае является главным источником данных? Или он просто является слоем перед DBMS? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 10:51 |
|
Stream и память
|
|||
---|---|---|---|
#18+
PetroNotC Sharp adminDontSleep хезель mayton верно же сказал. Если все в кеше в оперативке, то память не меняется в методе. Тяжело выбросить в лог замер по памяти? конечно тяжело-это же динамический процесс - его нужно отловить- тоесть когда система будет нагружена достаточно если делать замеры на тестовой среде - нужно просить тестировщиков - а это геморой- проше на форуме спрсоить - может кто то знает как оно там работает под капотом но фактически уже сейчс понятно что коллекция объектов будет загружена в хип из кэша ,далее пока не применится терминальная операция стрим не понменят своего состояния - тоесть фактически я думаю что пока метод не отрбаотает на все эти объкеты будет ссылка и гц не сможет их удалить до оконочания метода- это собственно все ,что мне нужно знать было если есть кто не согласен с этим - прошу к дискуссии ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 10:52 |
|
Stream и память
|
|||
---|---|---|---|
#18+
adminDontSleep проблема в том что не хочется в память тащить такого количество объектов ,во первых они достаточно объемные и их очень много ,а хип не резиновый Есть "объект" и "данные объекта". "Объект" это "указатель на данные объекта и сами данные" (они могут храниться раздельно) или "указатель на (другой) объект". Если объект это какой-нибудь Long, то указатель на данные объекта будет больше, чем сами данные. Если объект это какой-нибудь байтовый буфер на пару килобайт, то указатель на данные объекта - пренебрежимо мал. Так вот - данные объекта не копируются, если вы специально этим не озаботились. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 10:52 |
|
Stream и память
|
|||
---|---|---|---|
#18+
mayton adminDontSleep пропущено... кеш в данном случае это хезель каст А Hazelcast в данном случае является главным источником данных? Или он просто является слоем перед DBMS? в данном случае хезель является источником правды и можно тоже самое сделать средствами хезелькаста и на стороне хезелькаста не затаскивая в хип лишние данные. Но я повторюсь - меня интересует как будет огранизована работа памяти в данной цепочке колекция UUID -по ней получаем из кэша- стрим объектов - мапим в стрим других объектов( например в лонги) фильтруем и считаем количество элементов вот на каждом этом этапе интересует поведение памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 10:58 |
|
Stream и память
|
|||
---|---|---|---|
#18+
Basil A. Sidorov adminDontSleep проблема в том что не хочется в память тащить такого количество объектов ,во первых они достаточно объемные и их очень много ,а хип не резиновый Есть "объект" и "данные объекта". "Объект" это "указатель на данные объекта и сами данные" (они могут храниться раздельно) или "указатель на (другой) объект". Если объект это какой-нибудь Long, то указатель на данные объекта будет больше, чем сами данные. Если объект это какой-нибудь байтовый буфер на пару килобайт, то указатель на данные объекта - пренебрежимо мал. Так вот - данные объекта не копируются, если вы специально этим не озаботились. в целом ты прав,но забываешь о том ,что объекты изнчально находятся в кеще(в данном случае это хезель каст) и чтобы стрим начал с ними работать я думаю они будут целиком загружены в хип ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 11:01 |
|
|
start [/forum/topic.php?fid=59&msg=40126209&tid=2120265]: |
0ms |
get settings: |
18ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
37ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
458ms |
get tp. blocked users: |
0ms |
others: | 355ms |
total: | 879ms |
0 / 0 |