LUA 쓰레기 수집 테이블, 중첩 테이블
-
05-07-2019 - |
문제
LUA 매뉴얼을 읽었지만 확실한 답변을 제공하지 않았습니다.
인덱스 배열 역할을하는 LUA 테이블이 있다고 가정 해 봅시다.
local myArray = {};
myArray[1] = "Foo";
myArray[2] = "Bar";
이 테이블을 어떻게 가장 잘 처리합니까? myArray를 nil로 설정합니까? 아니면 배열을 통해 반복하고 각 색인화 된 요소를 nil로 설정해야합니까?
마찬가지로, 사전 역할을하는 LUA 테이블이 있다고 가정 해 봅시다.
local myDictionary = {};
myDictionary["key1"] = "Foo";
myDictionary["key2"] = "Bar";
'myDictionary'를 nil로 설정하거나 반복해야합니까?
마지막으로, 테이블 중첩 된 곳에 메모리 관리 현명한 작업은 무엇입니까? 예를 들어
local myNestedCollection = {};
myNestedCollection[1] = {1, 2, 3};
myNestedCollection[2] = {4, 5, 6};
이 서브 테이블 각각을 반복하여 NIL로 설정해야합니까? 도움을 주셔서 감사합니다.
해결책
대부분의 GC에서는 언급이 없을 때 객체가 수집됩니다. 참조 체인의 상단을 NIL로 설정하면 어린이에 대한 참조가 제거됩니다. 그것이 유일한 참조라면 아이들이 수집됩니다.
다른 팁
로컬 변수를 nil
; 모든 열쇠를 반복 할 필요가 없습니다. nil
에게. 에 따르면 이 페이지, LUA는 마크 앤 스웨프 쓰레기 수집 알고리즘을 사용합니다. 로컬 변수를 설정하자마자 nil
, 테이블의 키는 도달 할 수 없게되므로 다음 컬렉션에서 쓰레기 수집가가 수집합니다. 마찬가지로, 해당 객체도 테이블이면 키도 연락 할 수 없게되므로 수집됩니다.
제휴하지 않습니다 StackOverflow