Skip to content

Instantly share code, notes, and snippets.

@yukoba
Last active August 29, 2015 14:16
Show Gist options
  • Save yukoba/5cc70dc000e4a23e1716 to your computer and use it in GitHub Desktop.
Save yukoba/5cc70dc000e4a23e1716 to your computer and use it in GitHub Desktop.
Boxing benchmark
import groovy.transform.CompileStatic
import org.junit.Test
@CompileStatic
class Benchmark {
@Test
void test1() {
int[] ary = new int[1024 * 1024]
for (int i = 0; i < ary.length; i++) {
ary[i] = i
}
def comprator = { int v1, int v2 -> -v1 <=> -v2 } as IntComparator
def startTime = System.nanoTime()
for (int iter = 0; iter < 50; iter++) {
int minV = 0
for (int i = 0; i < ary.length; i++) {
int v = ary[i]
if (comprator.compare(minV, v) > 0) {
minV = v
}
}
// println minV
}
def endTime = System.nanoTime()
printf("time = %gms\n", (endTime - startTime) / 1000000)
}
@Test
void test2() {
int[] ary = new int[1024 * 1024]
for (int i = 0; i < ary.length; i++) {
ary[i] = i
}
def comprator = { int v1, int v2 -> -v1 <=> -v2 } as Comparator<Integer>
def startTime = System.nanoTime()
for (int iter = 0; iter < 50; iter++) {
int minV = 0
for (int i = 0; i < ary.length; i++) {
int v = ary[i]
if (comprator.compare(minV, v) > 0) {
minV = v
}
}
// println minV
}
def endTime = System.nanoTime()
printf("time = %gms\n", (endTime - startTime) / 1000000)
}
@Test
void test3() {
int[] ary = new int[1024 * 1024]
for (int i = 0; i < ary.length; i++) {
ary[i] = i
}
def startTime = System.nanoTime()
for (int iter = 0; iter < 50; iter++) {
int minV = 0
for (int i = 0; i < ary.length; i++) {
int v = ary[i]
if (compare(minV, v) > 0) {
minV = v
}
}
// println minV
}
def endTime = System.nanoTime()
printf("time = %gms\n", (endTime - startTime) / 1000000)
}
static int compare(int v1, int v2) { -v1 <=> -v2 }
@Test
void test4() {
int[] ary = new int[1024 * 1024]
for (int i = 0; i < ary.length; i++) {
ary[i] = i
}
def comprator = new IntComparator() { int compare(int v1, int v2) { -v1 <=> -v2 } }
def startTime = System.nanoTime()
for (int iter = 0; iter < 50; iter++) {
int minV = 0
for (int i = 0; i < ary.length; i++) {
int v = ary[i]
if (comprator.compare(minV, v) > 0) {
minV = v
}
}
// println minV
}
def endTime = System.nanoTime()
printf("time = %gms\n", (endTime - startTime) / 1000000)
}
@CompileStatic
static interface IntComparator {
int compare(int v1, int v2);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment