これが役立つ例:
Weblogic 10.3 JVM での設定-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
は、JAX-WS 実装がすべての Web サービス呼び出しに対して新しいプロキシ クラスを作成し、最終的にメモリ不足エラーにつながるという問題の解決に役立ちました。
追跡するのは簡単ではありませんでした。次のコードは、常に同じプロキシ クラスを返しました。port
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);
内部的には、このプロキシは のインスタンスに委譲され、このインスタンスは、呼び出しごとにインクリメントされる新しいクラスにweblogic.wsee.jaxws.spi.ClientInstance
再び委譲されました。フラグを追加すると、は引き続きインクリメントされますが、少なくともこれらの一時クラスはメモリから削除されました。$Proxy[nnnn]
n
n
より一般的な注意として、これは Java リフレクションとプロキシを多用する場合に非常に便利です。java.lang.reflect.Proxy