以下情景:
我有一个包含40个线程的java客户端。每个线程都有自己的bean实例,每个线程调用其bean方法100次。 我对此测试的结果感到困惑,因为发送对象比发送字节数组或整数数组快得多。但是,发送单个整数值仍然是最快的。该测试中两个阵列的大小均为1.大小2048既不慢也不快。 map,data,panel,maprecord和field是具有相当多属性的类。
这怎么可能?
static:创建一次,服务器总是返回相同的实例 dynamic:每次调用beans方法时都会创建
sessions: 40
repetitions: 100
transactions: 4000
send bytes ( static )
transactions/s: 1047.3947
time: 3.819
send ints ( dynamic )
transactions/s: 11976.048
time: 0.334
send int arrays ( static )
transactions/s: 1114.5166
time: 3.589
send map with 30 fields ( static )
transactions/s: 4613.6104
time: 0.867
send map, created from panel ( dynamic )
transactions/s: 221.50847
time: 18.058
send data, containing a map created from a maprecord ( dynamic )
transactions/s: 5797.1016
time: 0.69
我的javax.ejb.EJBObject:
...
public byte[] getByteArrayForPerformanceTest() throws java.rmi.RemoteException;
public Map getMapForPerformanceTest() throws java.rmi.RemoteException;
public Data getConverseDataForPerformanceTest() throws java.rmi.RemoteException;
...
UserSessionBean:
...
private static byte[] byteArrayForPerformanceTest = new byte[1];
public byte[] getByteArrayForPerformanceTest() throws java.rmi.RemoteException {
return UserSessionBean.byteArrayForPerformanceTest;
}
...
答案 0 :(得分:0)
你的集合,地图和数组都是可序列化的,以及基元。 JBoss更可能使用标准Java序列化在远程权限之间发送/接收这些实例。如果你不想解释为什么一件事比其他事情更快,那么你为什么不将这些实例序列化为单独的文件并查看哪一个更大。特别是对于集合和映射,当您实例化它们时,您无法知道在引擎盖下创建了多少个对象(尤其是数组)。请注意,对于这些,您可以控制基础数组的初始大小。
答案 1 :(得分:0)
你没有说明这里的内容,但你可能会将你的对象序列化为字节数组,然后发送它们,JBoss正在序列化它们,所以两个序列化步骤。