/mobile Handheld Friendly website
Ubuntu : Intel® Q6600® one core |
Each table row shows performance measurements for this Java 7 program with a particular command-line input value N.
| N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load |
|---|---|---|---|---|---|
| 60,000 | 0.29 | 0.29 | 176 | 1429 | 0% 4% 0% 100% |
| 600,000 | 1.59 | 1.60 | 29,492 | 1429 | 0% 1% 1% 99% |
| 6,000,000 | 14.34 | 14.35 | 30,980 | 1429 | 0% 1% 0% 100% |
Read the ↓ make, command line, and program output logs to see how this program was run.
Read chameneos-redux benchmark to see what this program should do.
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) Server VM (build 23.6-b04, mixed mode)
/* The Computer Language Benchmarks Game http://benchmarksgame.alioth.debian.org/ contributed by Michael Barker based on a contribution by Luzius Meisser */ /** * This implementation uses standard Java threading (native threads). * * This implementation simply adds the new functionality to the orginal * implementation by Luzius Meisser from old chameneos shootout. The interesting * part of this implementation, is that while a creature is waiting it does not * block its thread, rather it spins in a loop using a Thread.yield(). */ public class chameneosredux { enum Colour { blue, red, yellow } private static Colour doCompliment(Colour c1, Colour c2) { switch (c1) { case blue: switch (c2) { case blue: return Colour.blue; case red: return Colour.yellow; case yellow: return Colour.red; } case red: switch (c2) { case blue: return Colour.yellow; case red: return Colour.red; case yellow: return Colour.blue; } case yellow: switch (c2) { case blue: return Colour.red; case red: return Colour.blue; case yellow: return Colour.yellow; } } throw new RuntimeException("Error"); } static class MeetingPlace { private int meetingsLeft; public MeetingPlace(int meetings) { this.meetingsLeft = meetings; } private Colour firstColour = null; private int firstId = 0; Future<Pair> current; public Pair meet(int id, Colour c) throws Exception { Future<Pair> newPair; synchronized (this) { if (meetingsLeft == 0) { throw new Exception("Finished"); } else { if (firstColour == null) { firstColour = c; firstId = id; current = new Future<Pair>(); } else { Colour newColour = doCompliment(c, firstColour); current.setItem(new Pair(id == firstId, newColour)); firstColour = null; meetingsLeft--; } newPair = current; } } return newPair.getItem(); } } public static class Future<T> { private volatile T t; public T getItem() { while (t == null) { Thread.yield(); } return t; } // no synchronization necessary as assignment is atomic public void setItem(T t) { this.t = t; } } static class Creature implements Runnable { private final MeetingPlace place; private int count = 0; private int sameCount = 0; private Colour colour; private int id; public Creature(MeetingPlace place, Colour colour) { this.place = place; this.id = System.identityHashCode(this); this.colour = colour; } public void run() { try { while (true) { Pair p = place.meet(id, colour); colour = p.colour; if (p.sameId) { sameCount++; } count++; } } catch (Exception e) {} } public int getCount() { return count; } public String toString() { return String.valueOf(count) + getNumber(sameCount); } } private static void run(int n, Colour...colours) { MeetingPlace place = new MeetingPlace(n); Creature[] creatures = new Creature[colours.length]; for (int i = 0; i < colours.length; i++) { System.out.print(" " + colours[i]); creatures[i] = new Creature(place, colours[i]); } System.out.println(); Thread[] ts = new Thread[colours.length]; for (int i = 0; i < colours.length; i++) { ts[i] = new Thread(creatures[i]); ts[i].start(); } for (Thread t : ts) { try { t.join(); } catch (InterruptedException e) { } } int total = 0; for (Creature creature : creatures) { System.out.println(creature); total += creature.getCount(); } System.out.println(getNumber(total)); System.out.println(); } public static void main(String[] args) { int n = 600; try { n = Integer.parseInt(args[0]); } catch (Exception e) { } printColours(); System.out.println(); run(n, Colour.blue, Colour.red, Colour.yellow); run(n, Colour.blue, Colour.red, Colour.yellow, Colour.red, Colour.yellow, Colour.blue, Colour.red, Colour.yellow, Colour.red, Colour.blue); } public static class Pair { public final boolean sameId; public final Colour colour; public Pair(boolean sameId, Colour c) { this.sameId = sameId; this.colour = c; } } private static final String[] NUMBERS = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; private static String getNumber(int n) { StringBuilder sb = new StringBuilder(); String nStr = String.valueOf(n); for (int i = 0; i < nStr.length(); i++) { sb.append(" "); sb.append(NUMBERS[Character.getNumericValue(nStr.charAt(i))]); } return sb.toString(); } private static void printColours() { printColours(Colour.blue, Colour.blue); printColours(Colour.blue, Colour.red); printColours(Colour.blue, Colour.yellow); printColours(Colour.red, Colour.blue); printColours(Colour.red, Colour.red); printColours(Colour.red, Colour.yellow); printColours(Colour.yellow, Colour.blue); printColours(Colour.yellow, Colour.red); printColours(Colour.yellow, Colour.yellow); } private static void printColours(Colour c1, Colour c2) { System.out.println(c1 + " + " + c2 + " -> " + doCompliment(c1, c2)); } }
Mon, 21 Jan 2013 06:30:08 GMT MAKE: mv chameneosredux.java-2.java chameneosredux.java /usr/local/src/jdk1.7.0_11/bin/javac chameneosredux.java 0.57s to complete and log all make actions COMMAND LINE: /usr/local/src/jdk1.7.0_11/bin/java -server -XX:+TieredCompilation -XX:+AggressiveOpts chameneosredux 6000000 PROGRAM OUTPUT: blue + blue -> blue blue + red -> yellow blue + yellow -> red red + blue -> yellow red + red -> red red + yellow -> blue yellow + blue -> red yellow + red -> blue yellow + yellow -> yellow blue red yellow 4007085 zero 3993229 zero 3999686 zero one two zero zero zero zero zero zero blue red yellow red yellow blue red yellow red blue 1199379 zero 1205899 zero 1195463 zero 1204388 zero 1203997 zero 1191523 zero 1203872 zero 1205581 zero 1193814 zero 1196084 zero one two zero zero zero zero zero zero