2009-05-01 31 views
12

Tôi đang chuyển một trò chơi sang Android (có rất nhiều mã và rất ít trong số đó là của tôi) và DalvikVM đang cho tôi biết (thông qua LogCat) tất cả về việc thu thập rác. Tại một số điểm trong mã, tôi nhận được một dòng "thư trả lời GC đối tượng/x ms", về cơ bản thông báo cho tôi rằng ~ 150.000 đối tượng vừa bị xóa và nó mất một giây đầy đủ.Android: Theo dõi số đối tượng được tạo

Tôi muốn biết chúng đến từ đâu! Tôi khá chắc chắn rằng tôi không tạo ra nhiều đối tượng cố ý.

Vì vậy, có cách nào để ... về cơ bản ngược lại với thông điệp đó không? Nội dung nào đó in thông báo tường trình khi đối tượng bất kỳ là đã tạo?

Bằng cách đó tôi có thể bước qua mã, kiểm tra xem có bao nhiêu thư được tạo và xem phần nào của mã đang tạo đối tượng. Tôi nghi ngờ một số hình thức tạo đối tượng trong một phần của một vòng lặp, nhưng nếu có thể điều này sẽ là một cách dễ dàng để nói chắc chắn.

Tôi đang sử dụng Eclipse 3.4.2, nếu điều đó có liên quan.

Bất kỳ ý tưởng nào?

+0

khi bạn tạo một đối tượng mới của đối tượng, bạn có thể không đăng nhập được không? –

+0

Vâng, vâng, nhưng tôi muốn đăng nhập một tin nhắn khi đối tượng _any_ được tạo. Giống như, ngay cả Rects hoặc Strings hay ... bất cứ thứ gì. – mcccclean

Trả lời

3

Tại sao bạn không cấu hình mã trò chơi hiện tại trên Sun JVM (giả sử bạn đang chuyển một trò chơi Java)? Sau đó, bạn có thể tận dụng lợi thế của JProfiler, Yourkit, v.v. và xem những bộ đồ vật khổng lồ nào đang được dọn sạch. (Sử dụng -XX: + PrintGCDetails để xem GC chạy khi nào cần tìm.)

Nếu nó không xuất hiện trong game, bạn đã dễ dàng tìm ra, và sau đó có thể chuyển sự chú ý của bạn vào mã Android của bạn. Và thật không may là tôi không biết nhiều về nó.

8

Điều này có thể sử dụng công cụ ddms đi kèm với Android (không phải phiên bản Eclipse). Sử dụng điều đó, hãy xem tab theo dõi phân bổ. Bạn có thể bắt đầu theo dõi phân bổ của tất cả các đối tượng cùng với dấu vết ngăn xếp của nơi chúng được phân bổ. Tuy nhiên, công cụ này có thể tạo ra nhiều thông tin và thông tin cụ thể mà bạn muốn không phải lúc nào cũng dễ dàng để phân tích hoặc tìm kiếm. Nếu bạn có một phiên bản cho Sun JVM, tôi sẽ khuyên bạn nên sử dụng các công cụ Kai đã đề cập, chúng được phát triển hơn rất nhiều. Nếu bạn phải làm điều đó trong Android, sử dụng trình theo dõi phân bổ sẽ cho bạn một sự khởi đầu.

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