ByteBuffer allocations and object members in GLOs

Hello,

I have a question which I think has an obvious answer, but I will ask it anyway :slight_smile: Regarding the ByteBuffers etc. required to represent a message to be sent from server to client, say if I have a GLO which needs to send players information about other players present in the GLO (room)

  • When and how should this be declared? Should I always create the buffer on the fly (e.g. with allocate), or would it be better to use an object member and therefore a reususable buffer? In the simple SwordWorld example, for instance, you do a ByteBuffer.allocate() and put() a String into the buffer, and send it, for each request. If I make it an object member (i.e. in the class definition for a GLO), won’t I get problems with serialisability?

What is the right approach (or at least, what are some good guidelines?)

Greg

Making it an object member really gains you nothing and just adds to the time to acces the object.

Keep in mind that the object is being deserialized from the store when it is used and serialized back when you are done.
Thus there is always an allocation of a ByteBuffer going on, the only difference is whether you are doing it or the serialization code is.

However is you DO make it part of the state of the GLO then yo uare adding to the work needed to serialize and desearilize the GLO because the serilization code is going to believe that the entire state of the buffer needs to be preserved.

So, the genral rule is the ONLY things that should be non-transient fields on the GLO are real data state that needs to be saved.