z.offheap.contrast.netty.NettyBufferTest.java Source code

Java tutorial

Introduction

Here is the source code for z.offheap.contrast.netty.NettyBufferTest.java

Source

/**
 * Copyright 2013, Landz and its contributors. All rights reserved.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

package z.offheap.contrast.netty;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.PooledByteBufAllocator;
import io.netty.buffer.Unpooled;

import java.util.concurrent.TimeUnit;

/**
 * Created by jin on 9/29/13.
 */
public class NettyBufferTest {

    public static void main(String[] args) {
        // A new dynamic buffer is created.  Internally, the actual buffer is created
        // lazily to avoid potentially wasted memory space.
        ByteBuf b = PooledByteBufAllocator.DEFAULT.directBuffer();

        // When the first write attempt is made, the internal buffer is created with
        // the specified initial capacity (4).
        long s = System.nanoTime();
        for (int i = 0; i < 256; i++) {
            b.writeByte(i);
        }
        long duration = System.nanoTime() - s;
        System.out.println("initial 256:   " + duration + " nanoseconds!");

        //
        s = System.nanoTime();
        b.writeByte(1);
        duration = System.nanoTime() - s;
        System.out.println("write to 257:  " + duration + " nanoseconds!");

        //
        for (int i = 0; i < 255; i++) {
            b.writeByte(i);
        }

        s = System.nanoTime();
        b.writeByte(1);
        duration = System.nanoTime() - s;
        System.out.println("write to 513:  " + duration + " nanoseconds!");
        //
        for (int i = 0; i < 511; i++) {
            b.writeByte(i);
        }

        s = System.nanoTime();
        b.writeByte(1);
        duration = System.nanoTime() - s;

        System.out.println("write to 1025: " + duration + " nanoseconds!");

        //
        int total = 256 * 1024;
        ByteBuf b2 = PooledByteBufAllocator.DEFAULT.directBuffer();
        s = System.nanoTime();
        for (int i = 0; i < total; i++) {
            b2.writeByte(i);
        }
        duration = System.nanoTime() - s;

        System.out.println("write 256KB data into pool direct buffer dynamically: "
                + TimeUnit.NANOSECONDS.toMillis(duration) + " millis!");

        total = 256 * 1024;
        ByteBuf b3 = Unpooled.buffer();
        s = System.nanoTime();
        for (int i = 0; i < total; i++) {
            b3.writeByte(i);
        }
        duration = System.nanoTime() - s;

        //the single shot performance is unstable for unpooled
        System.out.println("write 256KB data into unpooled buffer dynamically: "
                + TimeUnit.NANOSECONDS.toMillis(duration) + " millis!");
    }

}