使用jboss传输序列化对象比传输字节数组快得多?

时间:2011-09-29 12:58:40

标签: java jboss ejb

以下情景:

我有一个包含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;
}
...

2 个答案:

答案 0 :(得分:0)

你的集合,地图和数组都是可序列化的,以及基元。 JBoss更可能使用标准Java序列化在远程权限之间发送/接收这些实例。如果你不想解释为什么一件事比其他事情更快,那么你为什么不将这些实例序列化为单独的文件并查看哪一个更大。特别是对于集合和映射,当您实例化它们时,您无法知道在引擎盖下创建了多少个对象(尤其是数组)。请注意,对于这些,您可以控制基础数组的初始大小。

答案 1 :(得分:0)

你没有说明这里的内容,但你可能会将你的对象序列化为字节数组,然后发送它们,JBoss正在序列化它们,所以两个序列化步骤。