Передача сериализованных объектов с помощью Jboss намного быстрее, чем передача байтовых массивов? - PullRequest
1 голос
/ 29 сентября 2011

Следующий сценарий:

У меня есть Java-клиент с 40 потоками.Каждый поток имеет свой собственный экземпляр компонента, и каждый поток вызывает свой метод bean 100 раз.Я запутался в результатах этого теста, потому что отправка объектов оказалась намного быстрее, чем отправка байтовых или целочисленных массивов.Тем не менее, отправка одного целочисленного значения происходит быстрее всего.Размер обоих массивов в этом тесте был 1. Размер 2048 не был ни медленнее, ни быстрее.map, data, панель, maprecord и field являются классами с довольно большим количеством свойств.

Как это может быть?

static: создается один раз, сервер всегда возвращает один и тот же динамический экземпляр: создается каждый раз, когда вызывается метод bean-компонентов

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

My 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 голосов
/ 30 сентября 2011

Вы не говорите, что скрыто здесь, но вы можете, например, сериализовать свои объекты в байтовые массивы, а затем отправить их, а JBoss сериализует их , так что два шага сериализации.s

0 голосов
/ 29 сентября 2011

Ну, ваши Коллекции, Карты и массивы все сериализуемы, как и примитивы.Скорее всего, JBoss использует стандартную сериализацию Java для отправки / получения этих экземпляров между удаленными пользователями.Если вы не хотите объяснять, почему одна вещь идет быстрее, чем другая, то почему бы вам не сериализовать оба этих экземпляра в отдельные файлы и посмотреть, какой из них больше.Особенно с коллекциями и картами вы не можете знать, сколько объектов (особенно массивов) создано под капотом, когда вы создаете их экземпляры.Обратите внимание, что для них вы можете контролировать начальные размеры базовых массивов до некоторой точки.

...