Package bench.basic_jni

Source Code of bench.basic_jni.BenchBasic

/**
* Copyright (C) 2009-2012 Barchart, Inc. <http://www.barchart.com/>
*
* All rights reserved. Licensed under the OSI BSD License.
*
* http://www.opensource.org/licenses/bsd-license.php
*/
package bench.basic_jni;

import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import util.StopWatch;

import com.barchart.udt.ExceptionUDT;
import com.barchart.udt.SocketUDT;
import com.barchart.udt.TypeUDT;
import com.barchart.udt.util.HelpUDT;

public class BenchBasic extends SocketUDT {

  public BenchBasic(final TypeUDT type) throws ExceptionUDT {
    super(type);
  }

  static final int COUNT = 1 * 100 * 1000;

  static final int SIZE = 1024;

  private static Logger log = LoggerFactory.getLogger(BenchBasic.class);

  public static void main(final String[] args) throws Exception {

    log.info("init");

    testJava();
    testJNI();

    testJava();
    testJNI();

    testJava();
    testJNI();

    log.info("done");

  }

  static void testJava() throws Exception {

    log.info("### JAVA ###");

    long nanos;
    final StopWatch timer = new StopWatch();

    timer.start();
    for (int k = 0; k < COUNT; k++) {
      // baseline
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT;
    log.info("baseline nanos={}", nanos);

    timer.start();
    for (int k = 0; k < COUNT; k++) {
      // small array
      final byte[] array = new byte[128];
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT;
    log.info("make array 123; nanos={}", nanos);

    timer.start();
    for (int k = 0; k < COUNT; k++) {
      // medium array
      final byte[] array = new byte[1024];
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT;
    log.info("make array 1024; nanos={}", nanos);

    final int[] arrayInt = new int[SIZE];
    timer.start();
    for (int k = 0; k < COUNT; k++) {
      Arrays.fill(arrayInt, 1235678);
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT / SIZE;
    log.info("fill array; nanos={}", nanos);

    //

    final Integer[] array = new Integer[1024];
    timer.start();
    for (int k = 0; k < COUNT; k++) {
      for (final Integer i : array) {
        // iterate array
        final Integer x = i;
      }
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT / 1024;
    log.info("iterate array; nanos={}", nanos);

    // SET
    final Set<Integer> set = new HashSet<Integer>();
    for (int k = 0; k < 1024; k++) {
      set.add(k);
    }
    //
    timer.start();
    for (int k = 0; k < COUNT; k++) {
      for (final Integer i : set) {
        // iterate set
        final Integer x = i;
      }
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT / 1024;
    log.info("iterate set; nanos={}", nanos);
    //
    timer.start();
    for (int k = 0; k < COUNT; k++) {
      final Object[] x = set.toArray();
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT;
    log.info("set to array; nanos={}", nanos);

  }

  static void testJNI() throws Exception {

    log.info("### JNI ###");

    long nanos;
    final StopWatch timer = new StopWatch();

    timer.start();
    for (int k = 0; k < COUNT; k++) {
      // baseline
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT;
    log.info("baseline nanos={}", nanos);

    timer.start();
    for (int k = 0; k < COUNT; k++) {
      BenchBasic.testEmptyCall0();
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT;
    log.info("empty call; nanos={}", nanos);

    timer.start();
    for (int k = 0; k < COUNT * 10; k++) {
      final int[] array = BenchBasic.testMakeArray0(SIZE);
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT / 10;
    log.info("make arrray 1024; nanos={}", nanos);

    final int[] arrayInt = new int[SIZE];
    timer.start();
    for (int k = 0; k < COUNT; k++) {
      BenchBasic.testGetSetArray0(arrayInt, true);
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT;
    log.info("get/set/update array; nanos={}", nanos);
    timer.start();
    for (int k = 0; k < COUNT; k++) {
      BenchBasic.testGetSetArray0(arrayInt, false);
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT;
    log.info("get/set/abort  array; nanos={}", nanos);

    final Object[] array = new Object[SIZE];
    timer.start();
    for (int k = 0; k < COUNT; k++) {
      BenchBasic.testIterateArray0(array);
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT / SIZE;
    log.info("iterate object array; nanos={}", nanos);

    //
    final Set<Object> set = new HashSet<Object>();
    for (int k = 0; k < SIZE; k++) {
      set.add(k);
    }
    timer.start();
    for (int k = 0; k < COUNT / 10; k++) {
      BenchBasic.testIterateSet0(set);
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT / SIZE * 10;
    log.info("iterate object set; nanos={}", nanos);

    //

    final int FILL_SIZE = 1024;

    final byte[] fillArray = new byte[FILL_SIZE];
    timer.start();
    for (int k = 0; k < COUNT; k++) {
      BenchBasic.testFillArray0(fillArray);
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT;
    log.info("fillArray;  nanos={}", nanos);

    final ByteBuffer fillBuffer = ByteBuffer.allocateDirect(FILL_SIZE);
    timer.start();
    for (int k = 0; k < COUNT; k++) {
      BenchBasic.testFillBuffer0(fillBuffer);
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT;
    log.info("fillBuffer; nanos={}", nanos);

    final IntBuffer loadBuffer = HelpUDT.newDirectIntBufer(1024);
    timer.start();
    for (int k = 0; k < COUNT; k++) {
      BenchBasic.testDirectIntBufferLoad0(loadBuffer);
    }
    timer.stop();
    nanos = timer.nanoTime() / COUNT;
    log.info("loadBuffer; nanos={}", nanos);

  }

}
TOP

Related Classes of bench.basic_jni.BenchBasic

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.