Почему max составляет 491M (я ожидаю, что оно будет 512M)?
blockquote>Одно пространство выживших не учитывается в
max
, поскольку одно из пространств выживших всегда пусто. 116]
Смотри также этот ответ .Что означает не-куча (кто ее использует)?
blockquote>[1119 ]
MemoryMXBean
считает следующие пулы памяти JVM как «не куча»:Code Cache (или Code Heap) - область для скомпилированных методов и другого динамически генерируемого кода; Metaspace и Compressed Class Space - области для метаданных класса.
См. Также этот вопрос .
Что означает -Xms (начальный размер кучи)?
blockquote>Да, это начальный размер кучи. ОС лениво распределяет страницы в физической памяти (при первом доступе). Вот почему RSS может быть меньше общего зафиксированного размера.
Подробнее см. в этом ответе .
Правильна ли приведенная ниже формула
blockquote>Нет. Все гораздо сложнее. Я объяснил это подробно в этот ответ .
Я не думаю, что это имело бы значение. Особенно при чтении символа символом издержки ввода-вывода, вероятно, будут полностью доминировать над чем-либо еще. Почему Вы читаете единственные байты за один раз? Вы знаете, насколько чрезвычайно неэффективный это?
На файле 326 КБ быстрое решение будет состоять в том, чтобы, скорее всего, просто считать его в память сразу.
Различие между станд.:: ifstream и эквиваленты C, в основном вызов виртуальной функции или два. Это может иметь значение, если выполняется несколько десятков миллиона раз в секунду, иначе, не reall. файловый ввод-вывод является обычно столь медленным, что API раньше получал доступ к нему, действительно не имеет значения. Какие вопросы намного больше - шаблон чтения-записи. Много из ищет, плохие, последовательные хорошие чтения/записи.
Это должно быть немного медленнее, но как то, что Вы сказали, это не могло бы быть узкое место. Почему Вы не представляете свою программу и видите, если это так?
Я думаю, что это маловероятно, Ваша проблема будет решена путем переключения от fstream до ФАЙЛА*, обычно оба буферизуются библиотекой C. Также ОС может кэшировать чтения (Linux очень хорош в том аспекте). Учитывая размер файла Вы получаете доступ, довольно вероятно, это будет полностью в RAM.
Как PolyThinker говорят, что Ваш лучший выбор состоит в том, чтобы выполнить Вашу канавку программы профилировщик определение, где проблема.
Также Вы используете seekg/tellg, это может вызвать известные задержки, если Ваш диск в большой степени фрагментируется, потому что для чтения файла впервые диск должен двигать головами к правильному положению.
Все сравнительные тесты являются злыми. Просто представьте свой код для данных, которые Вы ожидаете.
Я выполнил сравнение производительности ввода-вывода Ruby, Python, Perl, C++ однажды. Для моих данных, версий языков, и т.д. вариант C++ был несколько раз медленнее (это было большое удивление в то время).
Я соглашаюсь, что необходимо представить. Но если Вы читаете файл символ за один раз, как насчет того, чтобы создать файл с отображенной памятью? Тем путем можно рассматривать файл как массив символов, и ОС должна заботиться обо всей низкоуровневой буферизации для Вас. Самой простой и вероятно быстрым решением является победа в моей книге.:)