package org.basex.util; /** * This class contains methods for performance measurements. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public final class Performance { /** Performance timer, using nano seconds. */ private long time = System.nanoTime(); /** * Returns the measured execution time in nanoseconds. * @return execution time */ public long getTime() { final long time2 = System.nanoTime(); final long diff = time2 - time; time = time2; return diff; } /** * Returns the measured execution time in milliseconds and reinitializes * the timer. * @return execution time */ public String getTimer() { return getTimer(1); } /** * Returns the measured execution time in milliseconds, divided by the * number of runs, and reinitializes the timer. * @param runs number of runs * @return execution time */ public String getTimer(final int runs) { final long time2 = System.nanoTime(); final String t = getTimer(time2 - time, runs); time = time2; return t; } /** * Returns a string with the measured execution time in milliseconds. * @param time measured time in nanoseconds * @param runs number of runs * @return execution time */ public static String getTimer(final long time, final int runs) { return time / runs / 10000 / 100d + " ms" + (runs > 1 ? " (avg)" : ""); } /** * Returns a formatted representation of the current memory consumption. * @return memory consumption */ public static String getMem() { return format(mem()); } /** * Formats a number according to the binary size orders (KB, MB, ...). * @param size value to be formatted * @return formatted size value */ public static String format(final long size) { return format(size, true, 5); } /** * Formats a file size according to the binary size orders (KB, MB, ...). * @param size file size * @param det detailed suffix * @return formatted size value */ public static String format(final long size, final boolean det) { return format(size, det, 0); } /** * Formats a file size according to the binary size orders (KB, MB, ...), * adding the specified offset to the orders of magnitude. * @param size file size * @param det detailed suffix * @param off offset * @return formatted size value */ private static String format(final long size, final boolean det, final int off) { if(size > 1L << 30 + off) return (size + (1L << 29) >> 30) + " GB"; if(size > 1L << 20 + off) return (size + (1L << 19) >> 20) + " MB"; if(size > 1L << 10 + off) return (size + (1L << 9) >> 10) + " KB"; return size + (det ? " Byte" + (size == 1 ? "" : "s") : " B"); } /** * Sleeps the specified number of milliseconds. * @param ms time in milliseconds to wait */ public static void sleep(final long ms) { try { Thread.sleep(ms); } catch(final InterruptedException ex) { } } /** * Performs some garbage collection. * GC behavior in Java is a pretty complex task. Still, garbage collection * can be forced by calling it several times. * @param n number of times to execute garbage collection */ public static void gc(final int n) { for(int i = 0; i < n; ++i) System.gc(); } /** * Returns the current memory consumption in bytes. * @return memory consumption */ public static long mem() { final Runtime rt = Runtime.getRuntime(); return rt.totalMemory() - rt.freeMemory(); } @Override public String toString() { return getTimer(); } }