Каково влияние подкачки на сборку мусора? - PullRequest
5 голосов
/ 03 октября 2010

Каково влияние подкачки на сборку мусора?

Ответы [ 2 ]

4 голосов
/ 03 октября 2010

Влияние подкачки на сборку мусора практически такое же, как и на все остальное;он позволяет получить доступ к большому объему памяти, но при этом снижает производительность.

Более насущный вопрос, каково влияние сбора мусора на подкачку?

Сбор мусора может вызывать областипамять, которая будет считываться и записываться в нее, не будет считаться иначе в данный момент времени.Поэтому уменьшение степени, в которой сборка мусора вызывает пейджинг, является выгодным.Это одно из преимуществ, которые предлагает сборщик компактных данных поколений, поскольку он приводит к тому, что на одной странице появляется больше недолговечных объектов, которые собираются с этой страницы, а память выделяется для других объектов, при этом сохраняя долгоживущие объекты встраница, на которой вероятнее всего также будут находиться связанные объекты (долгоживущие объекты часто будут связаны с другими долгоживущими объектами, поскольку один долгоживущий объект поддерживает другие).Это не только уменьшает объем подкачки, необходимый для выполнения сбора, но и может помочь уменьшить объем подкачки, необходимый для остальной части приложения.

3 голосов
/ 03 октября 2010

Сначала немного терминологии.В некоторых областях, например, связанных с Linux разговорах, paging является функцией операционной системы, в которой исполняемый код не обязательно должен постоянно находиться в оперативной памяти.Исполняемый код происходит из исполняемого файла, и ядро ​​загружает его с диска по требованию, когда процессор выполняет инструкции в программе.Когда памяти недостаточно, ядро ​​может решить просто «забыть» страницу кода, поскольку оно знает, что всегда может перезагрузить ее из исполняемого файла, если этот код необходимо выполнить снова.

Ядротакже реализует еще одну функцию, которая называется swapping и примерно такая же, но для данных.Данные не получены из исполняемого файла.Следовательно, ядро ​​не может просто забыть страницу данных;он должен сохранить его где-то, в специальной области, называемой «файл подкачки» или «раздел подкачки».Это делает подкачку более дорогой, чем подкачка: ядро ​​должно записать страницу данных перед повторным использованием соответствующей оперативной памяти, тогда как кодовая страница может просто повторно использоваться напрямую.На практике страницы ядра довольно много перед тем, как рассмотреть возможность обмена.

Пейджинг , таким образом, ортогонален сборке мусора. Обмен , однако, не является.Общее эмпирическое правило заключается в том, что обмен и сборщик мусора плохо сочетаются.Большинство GC работают, регулярно проверяя данные, и если указанные данные были отправлены в раздел подкачки, то их придется перезагружать из этого раздела, что означает, что некоторые другие данные должны быть отправлены в указанный раздел, потому что еслиданные были в разделе подкачки, а не в оперативной памяти, то это означает, что память ограничена.При наличии подкачки сборщик мусора имеет тенденцию вызывать значительную активность на диске.

Некоторые сборщики мусора применяют сложные стратегии для уменьшения стратегий, связанных с обменом.Это включает в себя GC поколения (который пытается исследовать старые данные реже) и строгую типизацию (GC смотрит на данные, потому что ему нужно найти указатели ; если он знает, что большой кусок оперативной памяти содержит только не указателиНапример, это некоторые данные изображения только с пиксельными значениями, тогда он может оставить их в покое, и, в частности, , а не принудительно возвращает их из области подкачки).Известно, что GC в виртуальной машине Java (от Sun / Oracle) достаточно хорош.Но это только относительно: если ваше Java-приложение ударит по swap, вы будете ужасно страдать.Но это могло бы быть намного хуже .

Просто купите немного дополнительной оперативной памяти.

...