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?
Trả lời
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
}
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.
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.
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.
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
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
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 TraceClassLoading
và TraceClassUnloading
. 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 ...]
- 1. Thiết bị hủy không được gọi sau khi phá hủy đối tượng được sắp xếp mới
- 2. Làm thế nào để biết khi nào mô hình tự động bị phá hủy bởi: phụ thuộc =>: phá hủy trong đường ray?
- 3. Làm thế nào để phá hủy một datatable?
- 4. Thuộc tính tham chiếu có bị hủy khi lớp bị hủy trong C++ không?
- 5. Tạo lớp/phá hủy lớp ảo trong delphi
- 6. Java: Làm thế nào để nạp Class được lưu trữ dưới dạng byte [] vào JVM?
- 7. Làm thế nào để phá hủy đúng trường hợp CKEditor?
- 8. WebSphere 7 - trình theo dõi bộ nạp lớp
- 9. Làm thế nào là phá hủy các biến cục bộ khi một khối được thoát thường được gọi trong C++?
- 10. Làm thế nào để bạn vô hiệu hóa việc nạp/khởi tạo lớp lười trong JVM của Sun?
- 11. Làm thế nào để theo dõi TextPointer trong WPF RichTextBox?
- 12. Java applet: Làm thế nào để chắc chắn phá hủy được hoàn thành trước khi làm mới trang
- 13. Làm thế nào để hủy bỏ một quá trình PHP, khi cuộc gọi ajax bị hủy?
- 14. Làm thế nào để phá hủy đúng ToneUnit sau khi âm thanh mất dần?
- 15. Ngăn chặn hoạt động không bị phá hủy
- 16. Xóa các thực thể không bị phá hủy trong Symfony2
- 17. Làm thế nào để theo dõi bất cứ khi nào một giá trị ô được thay đổi trong DataGridView?
- 18. LISP - cấu trúc phá hoại và không phá hủy
- 19. Làm thế nào để bạn phá hủy một đối tượng trong Perl một cách rõ ràng?
- 20. Làm thế nào để theo dõi số lượng phiên bản của một loại?
- 21. Các trình phá hủy gốc và được quản lý
- 22. Trình phá hủy ảo hoạt động như thế nào?
- 23. Khi nào và như thế nào là một trình nạp lớp java được đánh dấu để thu thập rác?
- 24. Nhận bytecode từ lớp được nạp
- 25. Làm thế nào để theo dõi vị trí đầu
- 26. Có cách nào để theo dõi/theo dõi và đăng nhập tất cả các phương thức, theo tên lớp và phương thức, trong một phiên gỡ lỗi không?
- 27. Tôi có bị rò rỉ bộ nạp lớp JAXB
- 28. Làm thế nào để theo dõi và kiểm tra phụ thuộc trong đá quý Ruby
- 29. Thứ tự các lớp khác nhau của một lớp được khởi tạo khi một lớp được nạp trong JVM là gì?
- 30. Làm thế nào để tạo dấu thời gian theo dõi
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