2011-03-20 47 views
5
// in a garbage collected VM, destroy someObject: 
someObject.a = null; 
someObject.b = null; 
someObject = null; 

Tôi đã nghe nói rằng trong một máy ảo tốt như Java hoặc C# 's, bạn không nên làm điều này. Đặt 'ab' sang null sẽ làm chậm bộ sưu tập rác do GC mất nhiều thời gian hơn để tìm ra các đối tượng ab trước đó không còn được tham chiếu nữa, trong khi nếu bạn để nguyên nguyên thì GC sẽ ngay lập tức kiểm tra khi làm sạch someObject.Đặt tham chiếu thành null trong đối tượng để được GC'ed?

Giả sử những gì tôi nghe là đúng (đúng với tôi nếu không), có giống với AVM2, ActionScript 3 VM (đặc biệt trong các phiên bản Flash Player mới nhất) không?

Lý do tôi hỏi là tôi có một đồng nghiệp làm như vậy, bởi vì anh ấy đã học tại một chủ nhân trước đó nhanh hơn và Flash có nhiều quircks như thế (tôi thấy dễ tin).

Tôi chỉ tự hỏi liệu thông tin đó có được cập nhật hay không (đối với các tối ưu hóa Flash khác như vậy). Trong các thủ thuật tối ưu hóa trải nghiệm của tôi như vậy, việc đó đã lỗi thời khá nhanh trong một nền tảng sống.

+0

Bạn thậm chí không cần phải cân nhắc xem đây có phải là một ý hay hay không. – delnan

Trả lời

2

Tôi không thể cung cấp cho bạn bất kỳ dữ liệu cụ thể, cứng nào trên đó nhanh hơn - thiết lập thành vô giá trị hay không. Tôi thành thật không tin bất cứ ai sẽ.

Điều tốt nhất tôi có thể làm là cung cấp cho bạn một số thông tin về thu gom rác và bạn có thể đưa ra quyết định của mình từ đó.

Từ Flash Player 9 đến Flash Player 10 Adobe đã thực hiện một số cải tiến nghiêm túc, đặc biệt là xung quanh bộ nhớ mangement. Có một số lỗi 'tải bên ngoài của swf' bộ nhớ, âm thanh unreferenced dính xung quanh, vv Hầu hết trong số đó đã được sửa chữa.

Grant Skinner đã nêu bật các kỹ thuật sử dụng GC để thiết lập đối tượng nào sẽ bị xóa. Xem bản trình bày tuyệt vời này (với một số tương tác thú vị) về cách hoạt động của nó http://gskinner.com/talks/resource-management/ (nhưng lưu ý rằng bản trình bày là về FP9)

Như ông nói có tính năng Tham khảo Đếm và Đánh dấu quét. Cuối cùng GC trong AS3 đi xuống để tham khảo. Nếu một đối tượng (một loại non primiative) có tham chiếu đến nó sẽ không bị xóa, nhưng nếu nó không, nghĩa là không có cách nào để truy cập nó, nó sẽ được đánh dấu để xóa. NHƯNG bạn không thể kiểm soát khi việc xóa thực sự xảy ra - có thể là khung này, có thể là khung tiếp theo.

Cuối cùng, 'null'ing' mọi biến/thuộc tính (tham chiếu hoặc cách khác), theo ý kiến ​​của tôi là lãng phí và rất không thể quản lý được. Có thể thực tế cho những thứ nhỏ hơn, nhưng khi các đối tượng trở nên lớn hơn với 100 biến số, bạn không thể vô hiệu hóa tất cả chúng một cách nhất quán.

Theo dõi trình phát Flash Player sẽ chỉ tối ưu hóa GC của họ cho đúng cách để thực hiện mọi thứ, chứ không phải ngược lại.

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