2010-02-19 23 views
6

Có thể truy vấn một bộ sưu tập được bán phá giá trong một vùng lưu trữ heap không? Tôi rõ ràng có thể duyệt bộ sưu tập đó bằng cách sử dụng một cái gì đó như Eclipse MAT, nhưng thực sự rất thích để có thể thực sự gọi một getter trên đối tượng bộ sưu tập. Điều này rõ ràng sẽ rõ ràng hơn nhiều so với việc đi qua các phân đoạn trong một ConcurrentHashMap cố gắng tìm bản đồ tôi cần.Công cụ để truy vấn các bộ sưu tập trong vùng chứa đống

Tôi cho rằng những gì tôi đang tìm kiếm là một cách để 'bù nước' trạng thái bán phá giá của một tập hợp được đặt tên sao cho nó có thể được xử lý bằng cách sử dụng các API tiêu chuẩn.

Có ai biết về bất kỳ tiện ích nào như vậy hay không, nếu không, ai đó có thể cung cấp một số mã mẫu hoặc con trỏ về cách đạt được điều này không?

Trả lời

6

Bạn sẽ có thể truy vấn tất cả các bộ sưu tập hoặc đơn lẻ bằng Ngôn ngữ truy vấn đối tượng (OQL) trong jhat.

Bạn không nhất thiết có thể gọi các phương thức tùy ý nhưng bạn có thể viết một số truy vấn phức tạp bằng các hàm sẵn có.

A. Sundararajan có một số bài đăng trên blog thú vị về chủ đề giới thiệu những gì bạn có thể làm. Xem herehere.

Ví dụ, bạn có thể tìm thấy tất cả các trường của java.util.HashMap có một chìa khóa kiểm tra với truy vấn sau đây:

select s from java.util.HashMap s where contains(s.table, function(it) { 
    if (it && it.key && it.key.value && it.key.value.toString() == 'test') { 
     return true; 
    } 
    return false; 
}) 

này nên tìm chìa khóa tương tự trong một java.util.concurrent.ConcurrentHashMap:

select s from java.util.concurrent.ConcurrentHashMap s where contains(s.segments, function(it) { 
    if (!it || !it.table) { 
     return false; 
    } 
    var i, e; 
    for (i=0; i < it.table.length; i = i + 1) { 
     e = it.table[i]; 
     if (e) { 
      return e.key && e.key.value && e.key.value.toString() == 'test'; 
     } 
    } 
    return false; 
}) 
+0

Cảm ơn - Tôi đã không thực sự nhận ra rằng OQL là mạnh mẽ. Có lẽ khi tôi có thời gian, tôi sẽ viết một công cụ để cho phép truy vấn 'thích hợp' các bộ sưu tập, nhưng các truy vấn OQL này sẽ làm những gì tôi muốn ngay bây giờ! – Rich

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