2016-03-30 11 views
4

Uygulamamda dinamik CXF istemcileri oluşturuyorum. Bununla ben kurulum testi uygulamasıDoğru java 8 sınıf boşaltma için kurulum (Metaspace cleanup)/cxf issue

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 

paramters ve ben java alıyorum döngü içinde istemci oluşturma işlemi sırasında

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

, Şimdi:

Bu istemci yaratılış kod parçacığı olduğunu. lang.OutOfMemoryError: Meta alan istisnası. Neden sınıfları boşaltılmamış/metaspace temizlenmediğini bilmiyorum. Birisi bana yardımcı olabilir here benim test projem. Sadece (mvn temiz paket) oluşturun ve yaptığım gibi komut satırı ile çalıştırın.

JDK8u77 kullanıyorum.

+0

10 Kendi 'ClassLoader'ınızı JaxWsDynamicClientFactory.createClient()' ye iletemediğin ve bitirdiğinizde imha etmediğinizin herhangi bir nedeni var mı? – Stackee007

cevap

2

Sorunu CXF'da buldum. Sorun, JaxWsDynamicClientFactory.createClient() içinde oluşturulan URLClassLoader'ın hiçbir zaman yok edilmemesidir.