Hi,

I've made some performance tests while the last hours. My special interest was the performance of non-direct ByteBuffer operations like an simple get(byte[]). Here is a very short code sample:

import java.nio.ByteBuffer;
import com.sun.grizzly.util.ByteBufferFactory;
//import org.apache.mina.common.ByteBuffer;

public class Test
{
        public static void main(String[] pArgs)
        {
                byte[] tBytes = new byte[ 100 ];
                
                //ByteBuffer buf = ByteBuffer.allocate( 100, false );
                ByteBuffer buf = ByteBufferFactory.allocateView( 7, false );

                long tStart = System.currentTimeMillis();
                for ( int i = 0; i < 10000000; i++)
                {
                        buf.get( tBytes );
                        buf.rewind();
                        //buf.position( 0 );
                }
                
                long tStop = System.currentTimeMillis();
                System.out.println( tStop - tStart );
        }
}

It seems that the Mina buffers need twice the time against the use of java.nio ByteBuffer directly (ByteBuffers which are constructed from Grizzly ByteBufferFactory are also a little bit slower because of the use of slice(), but only about 10%). You can check it simply if you use mybuffer.buf().get(...) instead of mybuffer.get(...)

What happens here?

Best Regards
Michael

Btw.: rewind() is ~15% quicker then position( 0 ) ;)

Reply via email to