System.Mem
| Авторские права | (c) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD-стиль (см. файл libraries/base/LICENSE) |
| Поддержка | libraries@haskell.org |
| Стабильность | предварительная |
| Переносимость | переносимая |
| Безопасный Haskell | Надежный |
| Язык | Haskell2010 |
Описание
Системные функции, связанные с памятью.
Сбор мусора
performGC :: IO () Исходный код
Вызывает немедленный основной сбор мусора.
performMajorGC :: IO () Исходный код
Вызывает немедленный основной сбор мусора.
С момента: base-4.7.0.0
performMinorGC :: IO () Исходный код
Вызывает немедленный незначительный сбор мусора.
С момента: base-4.7.0.0
Счётчик выделения памяти и ограничения
setAllocationCounter :: Int64 -> IO () Исходный код
Каждый поток имеет счётчик выделения памяти, который отслеживает, сколько памяти было выделено потоком. Счётчик инициализируется нулём, и setAllocationCounter устанавливает текущее значение. Счётчик выделения отсчитывает *вниз*, поэтому в отсутствие вызова setAllocationCounter его значение является отрицанием количества байт памяти, выделенной потоком.
Есть два способа использования этого счётчика:
- Использовать его как простой механизм профилирования с помощью
getAllocationCounter. - Использовать его как ограничение ресурсов. См.
enableAllocationLimit.
Подсчёт выделенной памяти точен только до примерно 4 Кбайт.
С момента: base-4.8.0.0
getAllocationCounter :: IO Int64 Исходный код
Возвращает текущее значение счётчика выделения памяти для текущего потока.
С момента: base-4.8.0.0
enableAllocationLimit :: IO () Исходный код
Включает счётчик выделения памяти, который используется в качестве ограничения для текущего потока. Когда ограничение выделения памяти включено, если счётчик выделения памяти уменьшается ниже нуля, потоку будет отправлено AllocationLimitExceeded асинхронное исключение. При этом счётчик сбрасывается (по умолчанию до 100 Кб, но настраиваемый с помощью +RTS -xq опции), чтобы он смог обработать исключение и выполнить необходимые действия по очистке. Если он исчерпает этот дополнительный лимит, будет отправлено другое AllocationLimitExceeded исключение, и так далее. Как и другие асинхронные исключения, AllocationLimitExceeded исключение откладывается, пока поток находится внутри mask или обработчика исключений в catch.
Обратите внимание, что выделение памяти не связано с *живой памятью*, также известной как *резиденцией в куче*. Поток может выделить большое количество памяти и сохранить от неё любое количество. Лучше рассматривать ограничение выделения памяти как ограничение на *время работы ЦП*, а не ограничение на память.
По сравнению с использованием таймаутов, ограничения на выделение памяти не учитывают время, затраченное на ожидание или выполнение вызовов в других системах.
С момента: base-4.8.0.0
disableAllocationLimit :: IO () Исходный код
Отключает обработку ограничения выделения памяти для текущего потока.
С момента: base-4.8.0.0
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/System-Mem.html