Latest web development tutorials

루아 가비지 컬렉션

루아는 자동으로 메모리 관리를 사용합니다. 이렇게하면, 그들이 객체 후 차지하는 메모리를 더 이상 사용하고 해제하는 방법을 고려하지 않는 메모리를 할당하는 방법을 새로 생성 된 개체에 대해 걱정할 필요가 없습니다.

루아 자동 메모리 관리를 수행하기 위해 (즉, 객체가 루아에 액세스 할 수없는) 모두죽은 개체를 수집 가비지 콜렉터를실행한다. LUA는 같은 모든 메모리에서 사용된다 : 문자열 등, 테이블, 사용자 데이터, 기능, 스레드, 내부 구조, 자동 관리에 적용된다.

검색 수집기 - Lua는 증분 마크를 구현합니다. 가비지 컬렉터 가비지 수집 율과 간헐 스테핑 배율이 가비지 콜렉션주기를 제어하는 ​​두 개의 숫자를 사용한다. 두 도면들은 (: 내부 표현 (1) (100)의 값 예를 들어) 단위의 비율을 사용한다.

가비지 콜렉션은 간헐적으로 속도가 오래 기다릴 수있는 새로운 사이클을 열기 전에 수집 할 필요가 제어합니다. 이 값을 늘리면 집의 열정을 줄일 수 있습니다. 이 값은 새로운 사이클을 열기 전에 콜렉터 기다리지 것이다 100 미만인 경우. 회 전체 메모리 사용은 새로운 사이클의 시작 전에 도달 할 때까지 수집 기다릴 수 (200),이 값을 설정한다.

가비지 수집기 스테퍼 배율 메모리 할당 변속비 콜렉터 상대의 동작 속도를 제어한다. 이것은 더 공격적 콜렉터의 값을 증가시킬뿐만 아니라, 각 증분 단계의 길이를 증가하지 않을 것이다. 집 루프를 할 정도로 항상 너무 느리게 작동하도록, 그래서 만약 미만 100로이 값을 설정하지 마십시오. 디폴트 값은 즉, 200 "이중"고속 작업 콜렉터 메모리 할당있다.

매우 큰 숫자로 배율을 밟을 경우, 콜렉터는 정지 - 세계 콜렉터처럼 동작 (이 프로그램에 사용될 수있는보다 바이트의 수는 10 % 크다). 전체 컬렉션을 수행, 루아에서 사용하는 각각의 메모리가 두 배 : 그럼 당신은 (200), 콜렉터의 행동에 동일한의 루아 버전의 과거 설정 간헐적 속도를 세우면.


가비지 컬렉터 기능

LUA는 다음함수가 CollectGarbage ([옵트 [ARG 제공함 ])로 자동 메모리 관리를 제어하는데 사용된다 :

  • 가 CollectGarbage ( "수집")는 : 전체 가비지 콜렉션주기 할.기능의 다른 세트를 제공하는 매개 변수를 선택 해제 :

  • 가 CollectGarbage는 ( "계산") : K 바이트의 수 루아에서 사용하는 메모리의 총량을 반환합니다.이 값은 우리가 아니라 당신은 루아에서 사용하는 바이트의 정확한 수를 (오버런하지 않는 한) 얻을 수있는 1,024을 곱해야하는 소수 부분이 있습니다.

  • 가 CollectGarbage ( "다시 시작") : 가비지 수집기가 자동으로 실행 다시 시작합니다.

  • 가 CollectGarbage ( "setpause") 다음 인수 수집기 간헐적 속도를 설정 (2.5 분파 참조).간헐적 속도의 이전 값으로 돌아갑니다.

  • 가 CollectGarbage ( "setstepmul은") : 단계 배율의 이전 값을 돌려줍니다.

  • 가 CollectGarbage ( "단계") : 한 단계는 가비지 컬렉터를 실행합니다.인수 제어에 의해 단계 "크기". 0 들어오는 집 스테퍼 (불가분의) 단계. 착신 비 - 제로 값은 집 전체 메모리의 작업이 다수의 (K 바이트)의 등가 루아 할당을 수집한다. 사이클의 콜렉터 끝이 true를 반환됩니다.

  • 가 CollectGarbage는 ( "정지") : 가비지 컬렉터의 실행을 중지합니다.다시 시작을 호출하기 전에 만 있기 때문에 명시 적으로 호출의 콜렉터가 실행합니다.

다음은 간단한 가비지 콜렉션 예를 보여

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

print(collectgarbage("count"))

mytable = nil

print(collectgarbage("count"))

print(collectgarbage("collect"))

print(collectgarbage("count"))

(메모리 사용에 참고 변경) 다음과 같이 위의 프로그램, 출력 결과는 다음과 같습니다

20.9560546875
20.9853515625
0
19.4111328125