Package bench.open_close

Source Code of bench.open_close.BenchOpenClose

/**
* 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.open_close;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;

import util.UnitHelp;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;

import com.barchart.udt.ExceptionUDT;
import com.barchart.udt.SocketUDT;
import com.barchart.udt.StatusUDT;
import com.barchart.udt.TypeUDT;

public class BenchOpenClose extends SocketUDT {

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

  static final int SIZE = 10 * 1024;

  static final BlockingQueue<SocketUDT> //
  queue = new LinkedBlockingQueue<SocketUDT>(SIZE);

  static final ExecutorService service = Executors.newSingleThreadExecutor();

  static final Runnable task = new Runnable() {

    @Override
    public void run() {
      while (true) {
        try {

          final SocketUDT socket = queue.take();

          socket.close();

          UnitHelp.socketAwait(socket, StatusUDT.CLOSED);

        } catch (final Exception e) {
          log.error("", e);
        }
      }
    }

  };

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

    final Logger logBack = (Logger) log;
    logBack.setLevel(Level.INFO);

    log.info("started");

    service.execute(task);

    long count = 0;

    while (true) {

      final SocketUDT socket = new SocketUDT(TypeUDT.STREAM);
      socket.bind(UnitHelp.localSocketAddress());
      UnitHelp.socketAwait(socket, StatusUDT.OPENED);

      Thread.sleep(20);

      queue.put(socket);

      final Runtime runtime = Runtime.getRuntime();

      if (count % 1000 == 0) {

        runtime.gc();

        final long totalMemory = runtime.totalMemory();
        final long freeMemory = runtime.freeMemory();
        final double ratio = (double) freeMemory / (double) totalMemory;

        log.info("total={} free={} count={} free/total={}",
            totalMemory, freeMemory, count, ratio);

      }

      count++;

    }

  }

}
TOP

Related Classes of bench.open_close.BenchOpenClose

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.