2012-04-19 47 views
40

Tôi đang cố liệt kê thứ tự mà trình nạp lớp Java đang tải các lớp của tôi. nếu tôi sử dụng tham số -verbose, nó sẽ liệt kê mọi giao diện/lớp đơn lẻ, bao gồm tấn giao diện như Serializable, ngoại lệ, v.v. Có cách nào để tinh chỉnh đầu ra này để nó chỉ hiển thị lớp nào được nạp trong lớp. được xác định?Lớp tải chi tiết Java đang tải

Trả lời

46

Tôi đoán đặt cược tốt nhất của bạn là phải làm như sau:

  • Output một số văn bản cố định một lần main bắt đầu phương pháp của bạn và ngay trước khi nó kết thúc.
  • ống các tiết sản lượng vào một tập tin
  • Sử dụng những thứ như ít hoặc grep để tìm các lớp nạp giữa hai thẻ từ phương pháp chính.

Có một câu hỏi tương tự và một số câu trả lời ở đây: Is there a way to get which classes a ClassLoader has loaded?

Bạn hãy thử -verbose:class?

4

Đây là biểu thức sed sẽ phân tích đầu ra của lớp java -verbose: để tạo ra các cặp tên lớp đã tải và tệp jar của nó. Bạn có thể thêm thông qua một loại để có được các tệp jar duy nhất. Ví dụ,

java -verbose:class -version 2>/dev/null | 
    sed -ne 's/\[Loaded \(.\+\) from \(.\+\)\]/\2/p' | 
    sort -u 

đầu ra

/usr/local/jdk1.7.0_67/jre/lib/rt.jar 
Các vấn đề liên quan