我正在我的应用程序中创建动态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异常。我不知道为什么类没有被卸载/ metaspace没有被清理。如果有人能帮助我,这里是我的测试项目链接:https://github.com/bilak/classloader-leak。只需构建(mvn clean package)并像我一样使用命令行执行即可。我正在使用JDK8u77。