CXF3.0动态调用客户端时还是存在内存不释放问题

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

CXF3.0动态调用客户端时还是存在内存不释放问题

猪打天下
This post has NOT been accepted by the mailing list yet.




通过JProfiler进行监测,如上面两个图,发现没调用1次,就增加1个,一共执行了2次,就增加了2个,如:
org.apache.cxf.BusFactory$BusHolder 4 +2 (+100 %) 96
org.apache.cxf.ws.policy.AssertionInfoMap 4 +2 (+100 %) 192

两者均指向:
====== Call Tree显示 =========
100.0% - 96 bytes - 4 alloc. org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run
100.0% - 96 bytes - 4 alloc. com.xxx.cxfFactory
100.0% - 352 bytes - 12 alloc. org.apache.cxf.endpoint.Client.invoke
====== Hot spots显示 =========
100.0% - 96 bytes - 4 hot spot alloc. org.apache.cxf.endpoint.Client.invoke
100.0% - 96 bytes - 4 hot spot alloc. com.xxx.cxfFactory
100.0% - 96 bytes - 4 hot spot alloc. org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run

其中com.xxx.cxfFactory的代码Code如下:
org.apache.cxf.endpoint.Client client = null;
// 创建客户端连接
                        org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory factory = org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory.newInstance();
                        client = factory.createClient(Url);
/**
         *
         * cxf WebService 请求
         *
         * @param url 请求地址
         * @param method 请求方法
         * @param args 请求参数
         * @return
         */
        protected Object[] cxfFactory(org.apache.cxf.endpoint.Client client, String method, Object[] args) {
                if (client == null) {
                        _logger.info("======== CXF客户端未创建,请求失败 ==========");
                        return null;
                }
                Object[] rts = null;
                try {
                        rts = client.invoke(method, args);
                } catch (Exception e) {
                        _logger.error(new StringBuffer("CXF客户端调用方法").append(method).append("导致错误: ").append(e.getMessage()));
                        Throwable ta = e.getCause();
                        if (ta instanceof SocketTimeoutException) {
                                _logger.info("Xfire客户端响应超时");
                        } else if (ta instanceof HTTPException) {
                                _logger.info("Xfire客户端调用服务端地址无效:404");
                        } else if (ta instanceof XMLStreamException) {
                                _logger.info("Xfire客户端连接超时");
                        } else {
                                _logger.info("Xfire客户端其它错误");
                        }
                }
                return rts;
        }

感觉在client.invoke(method, args)执行后,某些资源不能自动释放,请问有没有哪位大神对这个有深入的了解,或是找到具体的问题,请指教,谢谢。