2010-06-24 30 views
46

Tôi cần kiểm tra đơn xin rò rỉ bộ nhớ của mình, tôi cũng cần xem phần cấp phát bộ nhớ của ứng dụng của tôi. Tôi đã tải xuống và cài đặt bộ phân tích bộ nhớ eclipse, và có vẻ như bước đầu tiên là mở một bãi chứa đống. Nhưng một đống rác là gì, làm thế nào tôi có thể tạo một bãi chứa đống. Và làm thế nào chính xác đang tôi sẽ sử dụng phần mềm này, tôi đã làm một số googling nhưng tôi không thể tìm thấy bất kỳ thông tin hữu ích nhờAndroid ==> Phân tích bộ nhớ ==> Bộ phân tích bộ nhớ Eclipse?

+3

Just FYI, vì nó đề cập đến chủ đề này - có một bài đăng trên blog mới trên blog android về phân tích mem: http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html –

Trả lời

40

Khi bạn gỡ lỗi ứng của bạn, mở DDMS tại Eclipse. Trên thanh công cụ có một nút kết xuất heap mà bạn có thể sử dụng để tạo ra một đống kết xuất để xem trong bộ phân tích bộ nhớ Eclipse. Điều này chỉ được hỗ trợ tôi nghĩ với SDK 1.6+ hoặc 2.0+.

+0

Ok vì vậy tôi đã nhấp vào kết xuất và nó đã mở một blog mới cửa sổ có tên android123123123 với nhiều ký tự lạ trong đó. Tôi phải làm gì với trang này? Tệp ở đâu? Cảm ơn một lần nữa – aryaxt

+2

Tôi đã tự tìm ra. File ==> Save As, sau đó mở tập tin trong bộ phân tích bộ nhớ – aryaxt

+6

Bạn bỏ qua một bước quan trọng được đề cập trong câu trả lời của Mathias: "Heap dump của VM VM cần được chuyển đổi sang định dạng hprof thông thường bằng cách sử dụng trình chuyển đổi hprof-conv.exe trong thư mục công cụ của Android SDK. " –

10

Vùng lưu trữ của máy ảo dalvik cần phải được chuyển đổi sang định dạng thông thường của hprof bằng công cụ chuyển đổi hprof-conv.exe trong thư mục công cụ của SDK Android. Bạn có thể mở hprof này với Eclipse MAT hoặc các công cụ khác là: YourKit http://www.yourkit.com/ và JProbe http://www.quest.com/jprobe/

Bên cạnh DDMS bạn cũng có thể tạo ra các hprof từ bạn app/code (chỉ SDK mới hơn) thông qua Debug.dumpHprofData(...)

Note rằng trong DDMS, bạn có thể thấy đống mà ứng dụng của bạn đang sử dụng. Nó không hiển thị vùng nguyên bản mà các tài nguyên bên ngoài như bitmap được phân bổ. Tuy nhiên, các tài nguyên này cũng cần phải được xem xét khi kiểm tra rò rỉ bộ nhớ. Khi cả vùng gốc và ứng dụng heap thêm tối đa 16MB/resp. 24MB, bạn sẽ gặp lỗi OOM.

Bạn có thể xem heap gốc được sử dụng (ví dụ: bitmap trong ứng dụng của bạn) qua Debug.getNativHeapAllocatedSize().

+0

Tôi đang ở trên mac không có thèm như exe, và tôi không phải làm bất cứ điều gì với tập tin, tôi chỉ đơn giản là lưu nó như là từ nhật thực, và tôi mở nó với bộ phân tích bộ nhớ, không có vấn đề – aryaxt

+1

@ MathiasLin, có cách nào để phân tích/xem các đối tượng trong vùng heap không? – snapfractalpop

+0

@snapfractalpop xin lỗi, tôi không biết, chưa tự tìm kiếm. –

3

Xem thêm http://developer.android.com/guide/developing/debugging/ddms.html#profiling

Nếu nó giúp, bạn có thể bật hồ sơ qua địa phương mã bằng cách sử dụng API Debug. Theo cách đó, bạn có ít độ chi tiết hơn khi phân tích dấu vết trong ví dụ traceview. Xem http://macgyverdev.blogspot.com/2011/07/profiling-android-application-tutorial.html để biết ví dụ.

Và một số thông tin chi tiết về làm thế nào để chuyển đổi DDMS đống bãi để bạn có thể xem chúng trong Eclipse Memory Analyzer và tìm các đối tượng rò rỉ của bạn thông qua các dụng cụ cây Dominator: http://macgyverdev.blogspot.com/2011/11/android-track-down-memory-leaks.html

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