2012-03-29 38 views
19

Làm thế nào để tôi theo dõi khi lớp được tải và bị hủy trong jvm? Có bất kỳ phương pháp gọi lại được tiếp xúc bởi jvm?Làm thế nào để theo dõi khi lớp được nạp và bị phá hủy trong jvm?

+0

Bạn đang đặt hai câu hỏi trong một câu hỏi tại đây. Chính xác thì bạn đang cố gắng tìm hiểu điều gì, hoặc cố gắng hoàn thành? Khi bạn đã tìm ra điều đó, hãy chấp nhận câu trả lời đã giúp bạn nhiều nhất với điều đó. – Frans

Trả lời

0

Bạn có thể sử dụng khối tĩnh để phát hiện quá trình tải lớp nhưng bạn không thể phát hiện việc xếp lớp. Trong java tất cả các lớp được nạp thông qua trình nạp lớp hệ thống sẽ không bao giờ được dỡ bỏ và tất cả các lớp được nạp thông qua các trình nạp lớp khác sẽ chỉ được dỡ xuống khi trình nạp lớp được giải nén.

static{ 

     //execute when the class will be loaded 

    } 
5

Bạn có thể thêm Java Chọn không tham gia để xem những lớp được nạp qua:

java -verbose:class 

Về lớp bị phá hủy, tôi không chắc chắn.

0

Bạn có muốn thông tin này trong ứng dụng của mình hay bạn chỉ muốn phân tích thông tin đó từ bên ngoài? Trong trường hợp sau, bạn có thể sử dụng VisualVM cho điều đó. Có thể câu hỏi của bạn có liên quan đến câu hỏi này: Loaded classes in VisualVM.

7

Bạn có thể thêm command line option-verbose:class vào quy trình Java của mình, điều này sẽ hiển thị thông tin hiển thị về từng lớp được tải.

0

Bạn có thể theo dõi quá trình tạo lớp trong hàm tạo tĩnh. Và bạn không thể theo dõi sự hủy diệt của nó theo như tôi quan tâm. Các lớp chỉ được tải xuống khi gc thu thập trình nạp lớp được sử dụng để tải các lớp.
Bạn cũng có thể quan tâm đọc bài viết này: another question on classloaders at StackOverflow

2

Nếu là ok với việc sử dụng JRockit JVM, bạn có thể tận dụng các API dưới đây, mà sẽ cung cấp cho bạn gọi lại phương pháp khi một lớp được nạp và lớp được bốc dỡ.
Hãy xem JVM lớp mà từ đó chúng tôi có nghĩa vụ phải sử dụng phương pháp getClassLibrary().
Trên đối tượng classLibrary chúng tôi có thể đăng ký người nghe cho classloading sự kiện mang đến cho các tên lớp vv

21

Nếu bạn đang sử dụng một Sun/Oracle JVM, bạn có thể sử dụng các tùy chọn TraceClassLoadingTraceClassUnloading. Sử dụng sau đây để xem những tùy chọn JVM của bạn hỗ trợ:

java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version 

Nếu các tùy chọn được hỗ trợ, chạy ứng dụng Java của bạn sử dụng -XX:+TraceClassLoading -XX:+TraceClassUnloading. Bạn sẽ thấy các thông báo như:

[Loaded ... from ...] 
[Unloading class ...] 
Các vấn đề liên quan