由于WS客户端端口的初始化成本太高,我们希望重用相同的实例.我们还希望在每次调用之前在BindingProvider/RequestContext中设置不同的值.最初我们想这样做:
MyService service = new MyService(wsdlURL, name);
MyPort myPort = service .getMyServicePort();
Run Code Online (Sandbox Code Playgroud)
然后,在每次调用之前执行此操作:
Map requestContext = ((BindingProvider)myPort ).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, uName);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, pWord);
myPort.someFunctionCall();
Run Code Online (Sandbox Code Playgroud)
我的问题是,这个代码线程安全吗?JAX-WS文档似乎表明它不是线程安全的.但是,如果采取预防措施,CXF似乎也是如此.如果特别是JAX-WS和Metro不是线程安全的,有没有办法确保线程安全而不同步访问端口或ws操作?
VisualVM中"Monitor-> Classes"下标有"Total loaded"的图表是什么意思?
我问的原因是因为在特定的测试用例下,"Total loaded"图表呈线性增长,但内存(heap&permgen)保持稳定.
经过大约10分钟的压力测试,VisualVM报告超过600,000个"已加载"类.并且只有450个"卸载".该应用程序此时仍在响应.
这究竟意味着什么?它是否仍然计算GC运行期间清除的所有类?它们是不同的类或不同的类实例吗?