Tôi đang tìm hiểu về Sử dụng bộ nhớ bằng cách sử dụng MAT trong Eclipse. Mặc dù tôi đã gặp phải một vấn đề lạ. Để lại các ứng dụng nặng nề, tôi bắt đầu với ứng dụng "Hello World" lành tính nhất. Đây là những gì tôi nhận được như Thống kê số lượng trên Nexus 5, thời gian chạy ART, Lollipop 5.0.1.Dump Heap bất ngờ cho Hello World Android APP
ID: 1
Heap Kích: 25,429 MB
phân bổ: 15,257 MB
miễn phí: 10,172 MB
% sử dụng: 60%
# Objects : 43487
Heap dump của tôi cho tôi 3 nghi ngờ Rò rỉ bộ nhớ: Tổng quan
"Không thể đăng biểu đồ hình tròn vì danh tiếng thấp".
vấn đề nghi ngờ 1
Lớp "android.content.res.Resources", nạp bởi "", chiếm 10.166.936 (38.00%) byte. Bộ nhớ là được tích lũy trong một phiên bản của "android.util.LongSparseArray []" được tải bởi "".
Từ khóa android.util.LongSparseArray [] android.content.res.Resources
vấn đề nghi ngờ 2
209 trường hợp "android.graphics.NinePatch", nạp bởi "" chiếm 5.679,088 (21,22%) byte. Những trường hợp được tham chiếu từ một ví dụ của "java.lang.Object []", nạp bởi "" Từ khoá java.lang.Object [] android.graphics.NinePatch
vấn đề nghi ngờ 3
8 trường hợp "java.lang.reflect.ArtMethod []", được tải bởi "" chiếm 3,630,376 (13,57%) byte. Các trường hợp lớn nhất: • java.lang.reflect.ArtMethod [62114] @ 0x70b19178 - 1,888,776 (7,06%) byte. • java.lang.reflect.ArtMethod [21798] @ 0x706f5a78 - 782,800 (2,93%) byte. • java.lang.reflect.ArtMethod [24079] @ 0x70a9db88 - 546,976 (2,04%) byte. Từ khóa java.lang.reflect.ArtMethod []
Đây là tất cả bởi một mã đơn giản của:
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Câu hỏi
- Tại sao các số đống quá lớn. ? Cũng như một lưu ý phụ ứng dụng đã tiêu thụ 52 MB RAM trong hệ thống.
- Trường hợp 209 này của NinePatch sắp tới? Tôi chỉ tạo ra dự án bằng cách thực hiện một "Tạo một dự án mới" trong Eclipse?
- Sự nghi ngờ rò rỉ đầu tiên của tài nguyên, Nó luôn xuất hiện trong phân tích ứng dụng của tôi. Nó thực sự là một nghi phạm?
- ArtMethod là gì? Liệu nó có phải làm điều gì đó với thời gian chạy ART không?
Tôi không nghĩ rằng đây là một chức năng của hệ điều hành. Đối với ứng dụng của tôi, có phân bổ heap cao cho "android.content.res.Resources" và "android.graphics.NinePatch" trên thiết bị xhdpi/xxhdpi ngay cả trên KitKat. Xem câu hỏi này để biết thêm chi tiết: http://stackoverflow.com/q/30980112/3446669 – GunnerFan