Một ví dụ trong đó hữu ích:
Cài đặt -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
trên Weblogic 10.3 JVM của chúng tôi đã giúp giải quyết vấn đề trong đó việc triển khai JAX-WS đã tạo ra một lớp proxy mới cho mỗi cuộc gọi dịch vụ web, cuối cùng dẫn đến lỗi bộ nhớ.
Nó không tầm thường để theo dõi. Đoạn mã sau luôn trả về cùng một lớp proxy choport
final MyPortType port =
Service.create(
getClass().getResource("/path/to.wsdl"),
new QName("http://www.example.com", "MyService"))
.getPort(
new QName("http://www.example.com", "MyPortType"),
MyPortType.class);
Trong nội bộ, proxy này được ủy quyền cho một thể hiện weblogic.wsee.jaxws.spi.ClientInstance
, một lần nữa được ủy quyền cho một $Proxy[nnnn]
lớp mới , nơi n
được tăng lên trong mỗi cuộc gọi. Khi thêm các cờ, n
vẫn được tăng lên, nhưng ít nhất những lớp tạm thời đó đã bị xóa khỏi bộ nhớ.
Nói một cách tổng quát hơn, điều này có thể rất hữu ích khi sử dụng nhiều sự phản chiếu và proxy của Java thông qua java.lang.reflect.Proxy
CMSClassUnloadingEnabled
có bất kỳ tác động,UseConcMarkSweepGC
cũng phải được thiết lập