powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / vector на триллион объектов
25 сообщений из 332, страница 9 из 14
vector на триллион объектов
    #39991516
mayton
Почему винда не интересует?

потому что меня интересует только серверный кодинг
а на винде у меня серверов не было уже лет 15, и не будет никогда
у меня есть всего 1 стационарка на винде, но и та уедет на линух скоро
максимум, на что я могу променять линух, это на фрю. Но пока не знаю зачем...
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991517
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
2 ^ 64 ?
Вы бы с ограничениями архитектуры AMD64 ознакомились, что ли. Хотя бы для приличия.

А во-вторых - виртуальное адресное пространство далеко не бесплатно. В "прямой" схеме x86-архитектуры каждые полные или неполные два мегабайта линейного (виртуального) адресного пространства требуют одну физическую (4КБ) страницу в таблице страниц диспетчера виртуальной памяти. Большие страницы не рассматриваем - это отдельный класс виртуальной памяти и он далеко не универсальный.
В худшем случае "разреженного" выделения одна (виртуальная) страница данных (приложения) потребует одной (физической) страницы для данных VMM. Плюсом идёт то, что у каждого процесса - собственная карта виртуальной памяти, что ещё больше увеличивает расходы на управление (виртуальным) адресным пространством.
Фрагментировать "не такое большое" (по факту) адресное пространство - вполне реально.

JVM всегда требует сплошного адресного пространства, даже если конкретное приложение могло бы обойтись "отдельными кусками".
Насколько я понимаю, решаться это будет рамках нового API для работы с внешней памятью: JEP 370: Foreign-Memory Access API (Incubator) ( Java 14 ).
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991523
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov

JVM всегда требует сплошного адресного пространства

вот это я и не понимаю (((

адресное пространство все равно будет отображено на конкретные страницы физической памяти. Т.е. выделение _новой_ памяти для процесса должно идти постранично, кусками по 4 Kb (в случае обычных страниц). Один кусок физической памяти нафиг не нужен. Почему фрагментация внутри ОС (физической памяти) сказывается на приложении, мне не очень понятно
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991524
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev

2. У нас проблема была на более ровном месте. Компьютер с 32 Гб памяти, свободно 25 Гб. Пытаемся запустить Java VM с 20 Gb - облом, две Java VM с heap по 10 - нормально. Windows 7, Java толи 7, толи 8.
На "свежей" ОС, после перезагрузки, Java с 20 heap'ом запускается

Как-то неудачно, ИМХО, реализован Java VM heap в таком случае.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991527
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

Как-то неудачно, ИМХО, реализован Java VM heap в таком случае.

vector на триллион объектов ( C )

может быть Алексей Роза раньше в sun работал ? )))
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991528
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
вот это я и не понимаю (((
Априори JVM не знает какие массивы будет выделять приложение. Создание объекта "массив", напомню - функция JVM.
Возврат неиспользуемой памяти операционной системе появился далеко не сразу и далеко не во всех сборщиках мусора.
Отказ запускаться с фрагментированной кучей сразу - вполне разумное решение. Со своими недостатками, но это можно сказать о большинстве практичных общецелевых технических решениях.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991530
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov

JVM _вообще_ не запускалась, вываливалась в момент старта с кодом OS - не хватает памяти. Windows ей память выделить не мог.

Аналогиная проблема лет много назад вроде в форуме Delphi поднималась. Память на компе есть, свободная, Windows / RT одним куском ее выделять не хочет.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991531
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Leonid Kudryavtsev

2. У нас проблема была на более ровном месте. Компьютер с 32 Гб памяти, свободно 25 Гб. Пытаемся запустить Java VM с 20 Gb - облом, две Java VM с heap по 10 - нормально. Windows 7, Java толи 7, толи 8.
На "свежей" ОС, после перезагрузки, Java с 20 heap'ом запускается

Как-то неудачно, ИМХО, реализован Java VM heap в таком случае.

Обычно расчитывают и выделяют minimal footprint (Xms). А Xmx уже указывает потенциально возможный
размер до которого можно расти. Это хорошая практика для управления ресурсами.

Ситуация с падением 20Гб не говорит ниочем. Надо смотреть конкретную ОС и что было в логах jvm и логах ОС
в это время. Возможно это был баг.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991532
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Почему фрагментация внутри ОС (физической памяти)
Не физической памяти, а линейно-адресуемого (виртуального) адресного пространства , доступного процессу.
Для физической памяти нет понятия фрагментации - страницы отображаются в линейное адресное пространство процесса как богVMM положит.
Исключение - драйвера, работающие с устройствами ввода-вывода и устройствами, отображающими свою память в (физическое) адресное пространство процессора, "но это уже совсем другая история".
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991533
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Обычно расчитывают и выделяют minimal footprint (Xms). А Xmx уже указывает потенциально возможный
размер до которого можно расти. Это хорошая практика для управления ресурсами....

IMHO это как раз таки дебильная практика для управления ресурсов
нормальная это Xms = Xmx

Double IMHO
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991535
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Windows ей память выделить не мог.
Одним куском, Карл. Одним куском не мог.
Как говорил великий комбинатор: "Я бы взял частями, но мне нужно сразу".
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991536
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Leonid Kudryavtsev
Почему фрагментация внутри ОС (физической памяти)
Не физической памяти, а линейно-адресуемого (виртуального) адресного пространства , доступного процессу.

вот я это и не понимаю
оно же у каждого процесса своя?
или я не прав и оно едино для всех процессов в ОС?
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991538
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возьмем например "обычное" 32 бит приложение в среде Windows с 32 Gb RAM на компьютере.

Нашему приложению выделять 2 Гбайта только его "линейно-адресуемого (виртуального) адресного пространства" + будет еще свободное окно в 2 Gb для доступа к адресному пространству OS /назовем это так/. Ключем /3Gb это поведение можно поменять и будет 3 + 1 Gb.

Я почему-то наивно думал, что у 64 битного приложения все так же, только побольше )))
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991539
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
оно же у каждого процесса своя?
или я не прав и оно едино для всех процессов в ОС?
Оно и такое и такое.
Процесс может запрашивать и глобальные объекты, которые могут отображаться на одинаковые адреса в пространстве всех процессов. Глобальные объекты могут, наверное, и неявно создаваться операционной системой.
Одинаковые линейные адреса глобальных объектов для всех процессов могут назначаться по соображениям, например, эффективности и скорости.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991542
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Возьмем например "обычное" 32 бит приложение в среде Windows с 32 Gb RAM на компьютере.
... и получим облом задолго до исчерпания 2ГБ лимита. В худшем случае я мог выделить JVM менее 1000MiB, в лучшем - в пределах 1700MiB.

P.S.
Не надо сравнивать 32- и 64-разрядные системы напрямую - сохранение (ограниченной) обратной совместимости оно тоже не бесплатное.
Ну и лобовые экстаполяции - очень вредно: появляются дебильные темы про векторы из триллиона элементов и такие же вопросы про эффективность их кэширования.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991543
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е., у нас есть как минимум:
1. физическая память
2. адресное пространство ОС
3. адресное пространство конкретного процесса

вот я и не понимаю, как "фрагментация" 1 и 2, может помешать выделить большой кусок памяти для/в 3-ем. Т.к. "маппинг" осуществляется с гранулярностью одна страница и проблемы "одним куском" быть не должно в принципе IMHO
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991544
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
вот я и не понимаю, как "фрагментация" 1 и 2, может помешать выделить большой кусок памяти для/в 3-ем.
Про физическую память сразу забудьте - на прикладном уровне она вас, в целом, не касаетсяТ.к. "маппинг" осуществляется с гранулярностью одна страница и проблемы "одним куском" быть не должно в принципе IMHO"Особо принципиальные" будут работать сильно медленнее. Причём на самых критичных ко времени операциях типа IPC.
Просто потому, что "пойдя на принцип" не получится задействовать глобальные страницы, которые только и могут "пережить" смену карты памяти при переключении с одного процесса на другой.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991545
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov

в лучшем - в пределах 1700MiB

1700 heap + код JVM + стеки для потоков + PermGet + 64 Mb для JIT
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991546
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov

Thanks
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991547
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
1700 heap + код JVM + стеки для потоков + PermGet + 64 Mb для JIT
Я ставил для исполняемых файлов JRE флаг "Lagre Address Aware" - это меняет выделение памяти 32-разрядному процессу в 64-разрядной OS.
Не факт, что произвольный 32-разрядный бинарь будет правильно работать с этим флагом, когда реально "залезет" за второй гигабайт, но, в теории, можно запросить почти 4ГБ.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991549
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 1 Gb Linux (Free AWS instance) я вообще Java 1.9 запустить не смог. Не разобрался, как non heap memory уменьшить. Плюнул и поставил 1.8 )))

Вроде в пределе для 32 битного приложения в Windows доступно до 3 Gb. AFAIK
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991551
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Вроде в пределе для 32 битного приложения в Windows доступно до 3 Gb. AFAIK
В 32-разрядной винде - да. В 64-разрядной винде не требуется резервировать "минимум 1ГБ" в адресном пространстве 32-разрядного процесса.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991552
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevвот я и не понимаю, как "фрагментация" 1 и 2, может помешать выделить большой кусок памяти
для/в 3-ем.

Фрагментация как раз происходит в 3-м, о первом и втором можно просто забыть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991554
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
mayton

Обычно расчитывают и выделяют minimal footprint (Xms). А Xmx уже указывает потенциально возможный
размер до которого можно расти. Это хорошая практика для управления ресурсами....

IMHO это как раз таки дебильная практика для управления ресурсов
нормальная это Xms = Xmx

Double IMHO

У тебя в профиле виден Oracle. Тогда ты наверное помнишь что такое initial extent для таблиц.

Ps. Тоже имхо.
...
Рейтинг: 0 / 0
vector на триллион объектов
    #39991555
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton


Тут как раз наоборот. Таблица может расти - это ее нормальное поведение. Но "расти" для работающего __серверного__ приложение - что-то не то в консерватории или memory leak.

Выделять ресурсов для серверного приложения нужно ровно столько, сколько ему необходимо. Если сервер выделенный (в оптимале) то выделять всю память. Это как покупать выделенный сервер с 32 Гб оперативной памяти для Oracle и заставлять Oracle работать в 1 Gb памяти, а остальное оставить на всякий случай для OS / админа.

В ситуации с микро-сервисами не лучше. Т.к. Java более-менее хорошо умеет добавлять память к Heap из свободной памяти ОС, а вот освобождать ее она не очень любит. Это поведение можно поменять ключами, но вот лично я, трогать данные настройки побоялся бы.

IMHO для __серверов__ единственное вменяемое решение
a) Xms=Xmx
b) ни или Xms в рабочий объем + завышенный Xmx на всякий случай (который никогда не достигается) с информированием службы поддержки о сбое сервера (memory leak) и необходимости его ребута.
...
Рейтинг: 0 / 0
25 сообщений из 332, страница 9 из 14
Форумы / C++ [игнор отключен] [закрыт для гостей] / vector на триллион объектов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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