2009-07-19 31 views
5

Có thể triển khai trình nạp lớp đa luồng trong Java không? Trong một khung công tác siêu điều khiển, tôi cần phải nạp hàng trăm lớp trước, tức là, không phải là lười biếng như trình nạp lớp hệ thống. Để tăng tốc độ này, tôi muốn sử dụng tốt hơn các CPU đa lõi hiện tại. Trước khi tôi đi sâu vào đó, tôi sẽ quan tâm nếu ai đó đã có một số kinh nghiệm về vấn đề này hoặc nếu nó có thể hoàn toàn rõ ràng rằng có lẽ defineClass() là nút cổ chai trong trường hợp này.Có thể tải lớp học đa luồng không?

Cảm ơn Andre

Trả lời

6

Tôi tin rằng hiện tại bạn sẽ đạt một khóa độc quyền. Trong JDK7, các trình nạp lớp sẽ có thể tự đánh dấu là có khả năng song song.

Như mọi khi, tôi đề nghị có thể thực hiện một số tính toán ngược lại và sau đó hút và xem.

+0

OK, tôi sẽ kiểm tra API trình nạp lớp JDK 7.0 trước tiên. Nếu bạn đúng với khóa trong bất kỳ JDK nào <7.0 thì có thể có ít nhất lợi ích của việc tải mã byte song song từ hệ thống tệp và xử lý trước nó. Tôi sẽ làm một số thử nghiệm để xem nếu điều này là đủ tốt cho mục đích của tôi. –

+1

Đây là một liên kết: http://openjdk.java.net/groups/core-libs/ClassLoaderProposal.html. Tôi không biết bất cứ điều gì nhiều hơn đến nay so với bàn tay đó. –

+0

Cảm ơn Tom, liên kết rất toàn diện thể hiện hướng đi và tình hình hiện tại. –

0

Không có gì sai với việc có một hoặc chủ đề hơn tải một lớp trong nền mà yêu cầu tất cả các lớp học bạn cần phải tải trước được. Làm một nguyên mẫu với một Executor và Callables để bạn có thể nhận được một số thông tin lược tả với jvisualvm.

+1

Về mặt kỹ thuật, có thể có nhiều chuỗi tải lớp, điều này khá rõ ràng. Phương thức defineClass() không được đồng bộ hóa, đây là một điều kiện tiên quyết. Nhưng tôi tự hỏi nếu có một điểm đồng bộ hóa ở đâu đó sâu hơn trong mã JVM để ngăn chặn việc nạp lớp MT thực sự mà không cần phải nắm bắt rõ ràng? –

+1

defineClass không được đồng bộ hóa khi tải lớp được định nghĩa là đơn luồng của JVM. (Trong Java 5 và 6 ít nhất) Một vài trăm lớp không mất nhiều thời gian để tải khung thời gian bạn cần nó để tải là gì? –

+0

Tôi về cơ bản chỉ sợ rằng tôi căn cứ khuôn khổ của tôi trên một kiến ​​trúc mà không quy mô rất tốt. 100 của các lớp học chỉ là khởi đầu nhưng khi khuôn khổ ngày càng có nhiều tính năng, số lượng các lớp có thể lên tới hàng nghìn, điều này có thể dẫn tới độ trễ nghiêm trọng khi khởi động. –

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