6

Hôm nay tôi phát hiện ra rò rỉ bộ nhớ trong ứng dụng của mình với số lượng lớn các đối tượng được tạo thành các lớp ẩn danh. Đó là ví dụ cổ điển mà mỗi đối tượng đã có lớp riêng của nó được xác định và đưa vào heap.Làm thế nào để tìm thấy các gốc rễ của các lớp ẩn danh trong java?

Nó không phải là tầm thường để tìm thấy trong phân tích bộ nhớ thời gian chạy và phân tích kết xuất đống được thực hiện bởi bộ phân tích bộ nhớ Eclipse không hữu ích.

Tôi đã tự hỏi cách đăng nhập tất cả các lớp ẩn danh được tạo trong thời gian chạy với id luồng (hoặc ít nhất là trình nạp lớp cha).

Tôi nghĩ rằng điều duy nhất này một mình sẽ làm cho việc tìm kiếm nguyên nhân gốc rễ tầm thường.

Trả lời

1

Tôi không chắc rằng liệt kê tất cả các lớp ẩn danh sẽ đưa bạn đến mọi nơi, thường có rất nhiều trong số đó.

Điều bạn có thể cần là logic để tìm kiếm các cá thể của các lớp được giữ lại bởi các tham chiếu lớp bên trong (bao gồm các lớp ẩn danh).

Trong JProfiler, có một thanh tra tương ứng:

enter image description here

Đối tượng thiết lập tạo ra bởi việc kiểm tra có chứa tất cả các trường hợp như vậy và sau đó bạn có thể hiển thị một đường dẫn đến một thư mục gốc GC:

enter image description here

Tuyên bố từ chối trách nhiệm: Công ty của tôi phát triển JProfiler.

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