52700.fb2
10.6 Статистика выполнения программы
Процесс управления памятью скрыт от программиста. Но при этом в GHC есть развитые средства косвен-
ной диагностики работы программы. Пока мы пользовались самым простым способом проверки. Мы вклю-
чали флаг s в интерпретаторе. Пришло время познакомиться и с другими.
Управление памятью. Сборщик мусора | 163
Статистика вычислителя
Для начала научимся смотреть статистику работы вычислителя. Посмотреть статистику можно с помо-
щью флагов s[file] и S[file]. Эти флаги предназначены для вычислителя низкого уровня (realtime system
или RTS, далее просто вычислитель), они заключаются в окружение +RTS ... -RTS, если флаги идут в кон-
це строки и считается, что все последующие флаги предназначены для RTS мы можем просто написать ghc
–make file.hs +RTS ... Например скомпилируем такую программу:
module Main where
main = print $ sum [1 .. 1e5]
Теперь скомпилируем:
$ ghc --make sum.hs -rtsopts -fforce-recomp
Флаг rtsopts позволяет передавать скомпилированной программе флаги для вычислителя низкого уров-
ня, далее для краткости мы будем называть его просто вычислителем. С флагом fforce-recomp программа
будет каждый раз заново пересобираться. Теперь посмотрим на статистику выполнения программы (флаг
s[file], в этом примере мы перенаправляем выход в поток stderr):
$ ./sum +RTS -sstderr
5.00005e9
14,145,284 bytes allocated in the heap
11,110,432 bytes copied during GC
2,865,704 bytes maximum residency (3 sample(s))
460,248 bytes maximum slop
7 MB total memory in use (0 MB lost due to fragmentation)
Tot time (elapsed)
Avg pause
Max pause
Gen
0
21 colls,
0 par
0.00s
0.01s
0.0006s
0.0036s
Gen
1
3 colls,
0 par
0.01s
0.01s
0.0026s
0.0051s
INIT
time
0.00s
(