[Memory Leak – Flash Player]- P1. Những điều cơ bản

Khi mới bắt đầu làm việc với các ứng dụng Flash, tôi thường chỉ quan tâm tới tính đúng đắn của chương trình – nghĩa là chạy được và đáp ứng đúng yêu cầu của khách hàng chứ ít khi chú ý về performance. Sau một thời gian, tôi làm việc với các dự án lớn và lúc này, performace và tính ổn định được ưu tiên đặt lên hàng đầu. Và Memory Leak là một trong những vấn đề đầu tiên tôi cần quan tâm để đảm bảo performace và tính ổn định của ứng dụng. Trong loạt bài viết này, tôi muốn nói đến Memory Leak – tạm dịch là “sự rò rỉ bộ nhớ”  với các ứng dụng Flash/Flex trên môi trường Flash Player.

Memory Leak (ML) là gì ?

ML được hiểu là sự rò rỉ (hay thất thoát) một vùng nhớ, nguyên do là khi ứng dụng của bạn tạo ra một handle để quản lý một vùng nhớ, và sau khi sử dụng xong, ứng dụng của bạn không chịu gỡ bỏ handle này đi. Vùng nhớ này trở nên “vô chính phủ” trong khi tài nguyên của máy tính ngày càng cạn kiệt mà không được tái sử dụng.

Hậu quả do ML gây ra

Tất nhiên là hiệu suất của cả ứng dụng nói riêng và hệ thống nói chung sẽ bị giảm. Trong trường hợp xấu nhất, ML sẽ làm cho một phần hoặc toàn phần của hệ thống bạn treo cứng. Nếu các bạn đã có kinh nghiệm sử dụng các ứng dụng thuần Flash thì lâu lâu sẽ gặp trường hợp cả Browser treo cứng và bạn không còn cách nào khác là phải “end-task” browser và khởi động lại. Mặc dù gây nhiều hậu quả nghiêm trọng, nhưng ML không quá khó để phát hiện ra. Các hệ điều hành hiện tại tự nó có các cơ chế thông minh để cấp phát và thu hồi bộ nhớ. Bạn có thể dễ gặp phải ML trong các trường hợp sau:
– Một ứng dụng chạy liên tục và xin cấp phát bộ nhớ thường xuyên như các ứng dụng chạy trên máy chủ hoặc trên các thiết bị di động.
– Các ứng dụng trò chơi khi render các scene.
– Trong bản thân hệ điều hành cũng có xảy ra ML
– Ở các thiết bị di động bị giới hạn về dung lượng bộ nhớ

ML với các ngôn ngữ lập trình hiện tại

Các ngôn ngữ lập trình hiện đại như Java, C #, VB.NET hay LISP đều có cơ chế quản lý bộ nhớ tự động nên được xem là đã miễn dịch với ML. Mặc dù được xem như một ngôn ngữ lập trình hiện đại – ActionScript 3.0 lại chẳng hề được “miễn dịch” với ML mà thậm chí đây lại là một vấn đề lớn.

Cơ chế quản lý bộ nhớ của một ngôn ngữ lập trình hiện đại có thể thu hồi lại các vùng nhớ không truy cập đươc, tuy nhiên sẽ “bó tay” nếu vùng nhớ đó vẫn “có chính phủ”. Về mặt kỹ thuật, các ngôn ngữ lập trình mới đều ít nhiều cung cấp cho lập trình viên các công cụ để theo dõi việc cấp phát và sử dụng bộ nhớ, từ đó có phương án quản lý riêng của họ. Tuy nhiên lập trình viên nên chủ động “dọn dẹp” các tham chiếu sau khi sử dụng như đặt giá trị “null” cho các tham chiếu hoặc gỡ bỏ toàn bộ các “listener” đến các object không sử dụng để hạn chế tối đa ML.

Nói chung, quản lý bộ nhớ tự động sẽ làm ho các lập trình viên khoải mái hơn vì họ không cần phải quan tâm đến việc giải phóng bộ nhớ. Công việc của một lập trình viên sẽ dễ dàng hơn khi viết code, sử dụng tham chiếu đến các đối tượng và khi không còn sử dụng đối tượng đó nữa thì cũng chẳng hề bận tâm đến các tham chiếu xung quan đối tượng đó. Tuy nhiên, việc quản lý tự động này đôi khi cũng không hiệu quả, và không loại trừ tất cả các lỗi lập trình gây ra ML.

One thought on “[Memory Leak – Flash Player]- P1. Những điều cơ bản

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s