2010-07-15 33 views
7

Tôi có một ứng dụng được triển khai trên Glassfish hay không. Theo thời gian, số lượng các lớp được nạp vào hàng triệu và permgen của tôi dường như tăng lên.Tôi có bị rò rỉ bộ nạp lớp JAXB

Để giúp khắc phục sự cố, tôi đã thêm phần sau vào các đối số jvm của mình. -XX: + PrintGCDetails -XX: + TraceClassUnloading -XX: + TraceClassLoading

Bây giờ khi xem kết quả, tôi thấy các lớp học tương tự được nạp hơn và hơn nữa. Về cơ bản, mỗi khi một dịch vụ web được gọi và JAXB được sử dụng để xử lý xml.

[Loaded com.strikeiron.ZIPCodesInRadius $ JaxbAccessorF_userID từ JVM_DefineClass] [Loaded com.strikeiron.ZIPCodesInRadius $ JaxbAccessorF_userID từ JVM_DefineClass]

Điều này cho thấy một sự rò rỉ? Nếu vậy làm thế nào để giải quyết nó?

Trả lời

6

Tôi đã tìm thấy một chuỗi tương tự đã mô tả cùng một vấn đề mà tôi đang gặp phải. http://forums.java.net/jive/thread.jspa?threadID=53362

Tôi cũng tìm thấy một lỗi tại https://java.net/jira/browse/JAXB-581

Về cơ bản, vấn đề là tôi đang làm một JAXBContext mới ("your.class.xsd") mỗi khi đậu của tôi đã được gọi. Theo lỗi "Gọi JAXBContext.newInstance (...) ngụ ý tải lại tất cả mọi thứ kể từ khi bộ tải lớp hiện tại hoặc trình nạp lớp được chỉ định sẽ được (lại) được sử dụng."

Giải pháp là tạo ra một singleton hoạt động hiệu quả.

public enum JAXBContextSingleton { 

INSTANCE("your.class.xsd"); 
private JAXBContext context; 

JAXBContextSingleton(String classToCreate) { 
    try { 
     this.context = JAXBContext.newInstance(classToCreate); 
    } catch (JAXBException ex) { 
     throw new IllegalStateException("Unbale to create JAXBContextSingleton"); 
    } 
} 

public JAXBContext getContext(){ 
    return context; 
} 

} 

Và để sử dụng singleton

JAXBContext context = JAXBContextSingleton.INSTANCE.getContext(); 
0

Đây là một trong những lý do khiến tôi tránh xa JAXB. Tôi muốn viết các lớp cho nguyên soái và phi chính thống thực hiện tương ứng javax.xml.bind.Marshallerjavax.xml.bindUnmarshaller. Tôi viết chúng một lần và chúng đã hoàn thành. Không có sự phản chiếu và tạo lớp động.

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