-
Title:
04-04 Memory_Leaks
-
Description:
-
Một trong những điều tốt về ngôn ngữ
Java của Android là
-
môi trường bộ nhớ được quản lý của nó,
-
nghĩa là bạn không cần
quá quan tâm về việc phải xử lý
-
khi các đối tượng hình thành hay phá hủy.
-
Mặc dù điều này nhìn chung rất tuyệt,
-
nhưng vẫn có một số vấn đề được
che giấu ẩn dưới bề mặt này.
-
Bây giờ hãy nhớ các vùng bộ nhớ
trong thời gian chạy Android
-
được chia thành các khoảng,
dựa vào loại phân bổ và
-
cách tốt nhất mà hệ thống có thể tổ chức
phân bổ các sự kiện GC trong tương lai.
-
Mỗi không gian có kích thước
bộ nhớ dành riêng cho nó.
-
Khi kích thước kết hợp của đối tượng
trong vùng bắt đầu đạt cận trên,
-
một sự kiện garbage collection sẽ
được kích hoạt để giải phóng không gian
-
và loại các đối tượng không cần thiết.
-
Các sự kiện GC này nói chung không phải
vấn đề đáng lưu ý với hiệu suất của bạn.
-
Tuy nhiên, rất nhiều trong số đó
định kỳ và lặp đi lặp lại mãi
-
có thể nhanh chóng chiếm lĩnh
thời gian khung của bạn.
-
Bạn càng mất nhiều
thời gian với các GC
-
thì càng có ít thời gian làm những việc
như cung cấp và truyền tải audio.
-
Một tình trạng các nhà phát triển
triển hay gặp phải
-
gây ra rất nhiều GC diễn ra được gọi là
lỗ hổng bộ nhớ.
-
Lỗ hổng bộ nhớ là các đối tượng mà
ứng dụng không còn sử dụng tới, nhưng
-
bộ Garbage Collector không nhận ra
rằng chúng không được sử dụng.
-
Kết quả là chúng cư trú lại
trong vùng của bạn,
-
chiếm đi không gian giá trị và không bao
giờ giải phóng cho các đối tượng khác.
-
Khi tiếp tục bị rò rỉ bộ nhớ,
-
không gian có sẵn trong nguồn của
vùng tiếp tục
-
trở nên càng ngày càng nhỏ hơn, nghĩa là
nhiều GC được thi hành thường xuyên hơn
-
để cố gắng giải phóng không gian để
thực thi các chương trình thường.
-
Phát hiện và sửa chữa
các lỗ hổng là một công việc khó khăn.
-
Có những lỗ hổng rất dễ sinh ra,
-
giống như tạo tham chiếu vòng tròn tới
đối tượng mà chương trình không sử dụng.
-
Các loại khác thì
không đơn giản như vậy,
-
giống như giữ tay cầm tới những đối tượng
class-loader khi chúng đang được tải.
-
Trong cả hai trường hợp, một ứng dụng
nhanh chóng,
-
chạy ổn định cần có nhận thức và nhạy cảm
về các lỗ hổng bộ nhớ có thể tồn tại.
-
Ý tôi là, mã của bạn sẽ chạy trên
-
một liên kết thiết bị
và loại hình khác nhau,
-
và không phải tất cả trong đó sẽ có
dấu vết và kích thước bộ nhớ tương tự.
-
Thật may mắn, có một công cụ đơn giản
có sẵn sẽ giúp chúng ta tìm ra nơi mà
-
những lỗ hổng này có thể
tồn tại trong Android SDK.
-
Hãy cũng tìm hiểu nhé.