Latest web development tutorials

Lua zbieranie śmieci

Lua wykorzystuje automatyczne zarządzanie pamięcią. Oznacza to, że nie trzeba się martwić o nowo utworzonego obiektu, w jaki sposób można przydzielić pamięci, nie biorą pod uwagę, w jaki sposób zwolnić zajmowaną po obiekcie pamięć nie jest już używany.

Lua jest uruchomionyśmieciarza zebrać wszystkie martwe przedmioty(czyli obiekty mogą nie być dostępne w Lua), aby wykonać automatyczne zarządzanie pamięcią. Lua jest stosowany we wszystkich pamięci, takich jak: ciąg, stoły, dane użytkownika, funkcje, nici, wewnętrznej struktury, itp, podlegają automatycznego zarządzania.

Lua implementuje przyrostową znak - Collector skanowania. Wykorzystuje ona dwa numery do kontrolowania cyklu zbierania śmieci: śmieci poziom zbierania śmieci kolektor i przerywany stepping powiększenia. Obie postacie użyć procent jednostek (na przykład: wartość 100 w wewnętrznej reprezentacji 1).

zbieranie śmieci okresowo kontroluje szybkość musi zebrać przed otwarciem nowego cyklu długo czekać. Zwiększenie tej wartości zmniejsza entuzjazm kolektora. Gdy ta wartość jest mniejsza niż 100, gdy kolektor przed otwarciem nowego cyklu nie będzie musiał czekać. Ustaw tę wartość do 200 pozwoli kolektory czekać aż dwukrotnie Całkowite zużycie pamięci osiągnie przed rozpoczęciem nowego cyklu.

Garbage collector krokowego powiększenie kontroluje prędkość pracy kolektora w stosunku do wskaźnika prędkości alokacji pamięci. To nie tylko zwiększyć wartość kolektora bardziej agresywne, ale także zwiększyć długość każdej przyrostowej kroku. Nie ustawiaj tej wartości powinna być mniejsza niż 100, więc jeśli kolektor pracować powolny, więc zawsze jest tak wiele do zrobienia pętli. Domyślną wartością jest 200, co oznacza, że ​​przydział pamięci do kolektora "podwójnej" pracy prędkości.

Jeśli krok powiększenie do bardzo dużej liczby (liczba bajtów nie może być użyty w programie jest również 10% większy), kolektor działa jak kolektor przystanek-world. Następnie, jeśli umieścić przerywany stopy ustawione na 200, zachowania kolektora i obok wersji Lua tego samego: każda pamięć wykorzystywana przez Lua dwukrotnie, aby wykonać kompletną kolekcję.


Funkcja śmieciarza

Lua posiada następujące funkcjecollectgarbage ([[opt, arg] ]) jest używany do sterowania automatycznego zarządzania pamięcią:

  • collectgarbage ( "zbierać"): do pełnego cyklu zbierania śmieci.Opt parametrem, który stanowi inny zestaw funkcji:

  • collectgarbage ( "count"): K, aby powrócić liczbę bajtów Całkowita ilość pamięci używanej przez Lua.Wartość ta ma część ułamkową, musimy tylko pomnożyć 1024 można uzyskać dokładną liczbę bajtów używanych przez Lua (chyba wybieg).

  • collectgarbage ( "restart"): Ponownie garbage collector uruchamia się automatycznie.

  • collectgarbage ( "setpause"): Ustaw kolektor arg przerywany stopy (patrz rozdz; 2.5).Powrót do poprzedniej wartości przerywanego tempie.

  • collectgarbage ( "setstepmul"): Zwraca poprzednią wartość powiększenia kroku.

  • collectgarbage ( "krok"): jednoetapowa uruchomić śmieciarza.Krok "size" przez kontrolę arg. 0 przychodzące kolektora krokowego (niepodzielne) krokiem. Przychodzące niezerową wartość, kolektor do zbierania równoważne alokacji Lua z tych wielokrotnych (K bajtach) pracy pamięci. Jeśli koniec kolektora cyklu zwróci true.

  • collectgarbage ( "stop"): Stop tras śmieciarza.Przed wywołaniem restart, kolektor tylko ze względu na wyraźne wezwanie do uruchomienia.

Poniższa demonstruje prosty zbiórki śmieci Przykład:

mytable = {"apple", "orange", "banana"}

print(collectgarbage("count"))

mytable = nil

print(collectgarbage("count"))

print(collectgarbage("collect"))

print(collectgarbage("count"))

Powyższy program, wyniki są następujące wyjścia (zmiana nuta zużycie pamięci):

20.9560546875
20.9853515625
0
19.4111328125