Lua – Thu gom rác Trang trướcTrang tiếp theo Lua sử dụng quản lý bộ nhớ tự động sử dụng […]
Lua sử dụng quản lý bộ nhớ tự động sử dụng tính năng thu thập rác dựa trên một số thuật toán nhất định được tích hợp sẵn trong Lua. Là kết quả của quản lý bộ nhớ tự động, với tư cách là nhà phát triển –
Lua sử dụng bộ thu gom rác chạy theo thời gian để thu thập các đối tượng đã chết khi chúng không thể truy cập được nữa từ chương trình Lua.
Tất cả các đối tượng bao gồm bảng, dữ liệu người dùng, chức năng, luồng, chuỗi, v.v. phải chịu sự quản lý bộ nhớ tự động. Lua sử dụng bộ thu gom đánh dấu và quét tăng dần sử dụng hai số để kiểm soát các chu kỳ thu gom rác của nó, đó là tạm dừng bộ thu gom rác và hệ số nhân bước của bộ thu gom rác . Các giá trị này tính theo phần trăm và giá trị 100 thường bằng 1 trong nội bộ.
Tính năng tạm dừng của người thu gom rác được sử dụng để kiểm soát thời gian người thu gom rác cần đợi trước đó; nó được gọi lại bởi tính năng quản lý bộ nhớ tự động của Lua. Giá trị nhỏ hơn 100 có nghĩa là Lua sẽ không đợi chu kỳ tiếp theo. Tương tự, các giá trị cao hơn của giá trị này sẽ dẫn đến việc bộ thu gom rác hoạt động chậm chạp và kém tích cực hơn trong tự nhiên. Giá trị 200, có nghĩa là bộ thu sẽ đợi tổng bộ nhớ được sử dụng tăng gấp đôi trước khi bắt đầu một chu kỳ mới. Do đó, tùy thuộc vào bản chất và tốc độ của ứng dụng, có thể có yêu cầu thay đổi giá trị này để có được hiệu suất tốt nhất trong các ứng dụng Lua.
Hệ số nhân bước này kiểm soát tốc độ tương đối của bộ thu gom rác với tốc độ phân bổ bộ nhớ trong chương trình Lua. Giá trị bước lớn hơn sẽ dẫn đến việc thu gom rác hoạt động mạnh hơn và nó cũng làm tăng kích thước bước của mỗi bước thu gom rác gia tăng. Các giá trị nhỏ hơn 100 thường có thể dẫn đến việc tránh bộ thu gom rác không hoàn thành chu trình của nó và thường không được ưa thích. Giá trị mặc định là 200, có nghĩa là bộ thu gom rác chạy gấp đôi tốc độ cấp phát bộ nhớ.
Là nhà phát triển, chúng tôi có một số quyền kiểm soát việc quản lý bộ nhớ tự động trong Lua. Đối với điều này, chúng tôi có các phương pháp sau.
Dưới đây là một ví dụ đơn giản sử dụng ví dụ về bộ thu gom rác.Bản thử trực tiếp
mytable = {"apple", "orange", "banana"} print(collectgarbage("count")) mytable = nil print(collectgarbage("count")) print(collectgarbage("collect")) print(collectgarbage("count")) Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau. Xin lưu ý rằng kết quả này sẽ thay đổi do sự khác biệt về loại hệ điều hành và cũng như tính năng quản lý bộ nhớ tự động của Lua.
23.1455078125 149 23.2880859375 295 0 22.37109375 380
Bạn có thể thấy trong chương trình trên, khi việc thu dọn rác được thực hiện xong, nó sẽ làm giảm bộ nhớ được sử dụng. Nhưng, nó không bắt buộc phải gọi này. Ngay cả khi chúng tôi không gọi chúng, nó sẽ được trình thông dịch Lua thực thi tự động ở giai đoạn sau sau khoảng thời gian được xác định trước.
Rõ ràng, chúng ta có thể thay đổi hành vi của bộ thu gom rác bằng cách sử dụng các chức năng này nếu được yêu cầu. Các chức năng này cung cấp một chút khả năng bổ sung cho nhà phát triển để xử lý các tình huống phức tạp. Tùy thuộc vào loại bộ nhớ cần cho chương trình, bạn có thể sử dụng hoặc không sử dụng tính năng này. Nhưng sẽ rất hữu ích khi biết mức sử dụng bộ nhớ trong các ứng dụng và kiểm tra nó trong quá trình lập trình để tránh kết quả không mong muốn sau khi triển khai.
Lượt xem : 212
This is excellent news!
Haven't seen the build yet, I'll look now.
Checking the build now