On 5 Jul 2010, at 11:58, Mircea Markus wrote:
On 5 Jul 2010, at 13:50, Manik Surtani wrote:
>
> On 5 Jul 2010, at 11:33, Mircea Markus wrote:
>
>>
>> On 5 Jul 2010, at 13:21, Manik Surtani wrote:
>>
>>> What sort of socket do you use? Depending on this, socket.getOutputStream()
may be the most efficient (if it is a zero-copy NIO buffer for example).
>> SocketChannel socketChannel = SocketChannel.open(serverAddress);
>> *socket* = socketChannel.socket();
>
> Hmm. You could use ByteBuffers - and reuse them as well, if you know that the byte
array sizes are *roughly* similar.
no guarantee on that as I don't have control over the values.
> You will still have the same problem of a spike in value size that you described
below, in the case of pooling ExposedBAOS instances. You could maintain a threshold and
if such a stream were to exceed this size, instead of resetting and reusing this instance
you drop it from the pool and create a new one...
>
> This threshold would have to be configurable though otherwise you may end up with a
lot of unnecessary GC churn.
The more I think about it the more I like the idea of serializing the values directly to
the socket, and not reuse buffers for keys: these are small objects, and not sure that the
complexity (mainly thinking about concurrency control) would payoff.
Yeah I'm all for keeping it simple.
--
Manik Surtani
manik(a)jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org