4

アプリケーションで動的 CXF クライアントを作成しています。

これは、クライアント作成のコード スニペットです。

JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
Client client = factory.createClient("wsdl/hello.wsdl");

さて、このパラメータでテストアプリケーションをセットアップすると

java -Djava.io.tmpdir=/tmp/cxf -XX:MetaspaceSize=12m -XX:MaxMetaspaceSize=24m -XX:MaxMetaspaceFreeRatio=80 -XX:MinMetaspaceFreeRatio=40 -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=sums=200 -XX:+ParallelRefProcEnabled -XX:+AggressiveOpts -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/hdump.hprof -XshowSettings -jar classloader-leak.jar

クライアントの作成をループで実行すると、java.lang.OutOfMemoryError: Metaspace exception が発生します。クラスがアンロードされない/メタスペースがクリーンアップされない理由がわかりません。ここで誰かが私を助けることができれば、私のテストプロジェクトです。それをビルド(mvn clean package)して、私と同じようにコマンドラインで実行するだけです。

私はJDK8u77を使用しています。

4

1 に答える 1

2

CXFで問題を見つけたと思います。問題は、 JaxWsDynamicClientFactory.createClient() 内で作成された URLClassLoader が決して破棄されないことです。

于 2016-03-30T14:23:25.767 に答える