2013-11-28 16 views
7

Giả sử tôi có một số mã asm.js, có thể được tạo bởi emscripten. Giả sử nó có một loại cấu trúc phân cấp khá lớn, được trả về bởi hàm asm.js như là một con trỏ được một thư viện JavaScript nào đó nhặt trong một đối tượng JavaScript đẹp. Tốt cho đến nay.Trình hoàn tất cho các đối tượng JavaScript

Nhưng điều gì sẽ xảy ra nếu đối tượng đó nằm ngoài phạm vi và bị thu gom rác. Ngay bây giờ, mã asm.js không có cách nào để biết về điều đó, do đó bộ nhớ của cấu trúc sẽ vẫn được cấp phát, gây ra rò rỉ bộ nhớ.

Có cách nào để thêm trình hoàn thiện vào đối tượng JavaScript từ bên trong JavaScript không?

Trình hoàn thiện như vậy có thể được sử dụng để phân phối bộ nhớ trong asm.js, do đó tránh rò rỉ bộ nhớ. Cho đến nay tôi không thể tìm thấy một tài liệu có nghĩa là di động để đạt được điều này, nhưng có lẽ tôi đã tìm kiếm ở những nơi sai.

+0

Tôi nghĩ bạn không nên trộn asm.js với JavaScript. –

+0

có thể trùng lặp của [Khi nào các đối tượng JavaScript bị phá hủy?] (Http://stackoverflow.com/questions/10112670/when-are-javascript-objects-destroyed) – user

+0

@ user3075942: Không thực sự: câu hỏi đó có liên quan đến * khi * trong khi tôi không quan tâm đến thời gian miễn là tôi sẽ được thông báo về sự kiện này. Java có bộ sưu tập rác và finalizers, và tôi đã hy vọng cho một cái gì đó tương tự trong javaScript. – MvG

Trả lời

3

Câu trả lời đơn giản là không có hỗ trợ cho việc này.

Vì mã asm.js cần quản lý bộ nhớ của riêng mình, mọi thứ tương tác với các đối tượng được lưu trữ ở phía asm cần phải tôn trọng người quản lý bộ nhớ mà asm sử dụng thay vì trình quản lý bộ nhớ mà trình duyệt sử dụng. Điều tốt nhất mà bạn có thể làm là gọi một phương thức rõ ràng trên bất kỳ đối tượng nào tham chiếu đến bộ nhớ asm nội bộ bất cứ khi nào bạn tạo hoặc hủy một tham chiếu đến nó.

Các vấn đề liên quan