"long" Shift and Assignment: 30 Nanoseconds per Step

This section provides a tutorial example on how to perform benchmark tests to find out how long a shift and assignment loop will take to run. The answer is 30 nanoseconds per step.

Now I can add a shift operation in the assignment statement to measure the shift operation performance. Here is the test method:

```/**
* BenchmarkTestLong.java
*/
class BenchmarkTestLong {
...
// Test method for a shift operation in a loop
public static long shift(int steps, BenchmarkRunner runner) {
long x = 0;
long i = 0;
long last = steps;
runner.startTimer();
for (i=0; i<last; i++) {
x = i<<1;
}
runner.stopTimer();
return x;
}
}
```

Here are test results:

```C:\herong\jvm>java -Xint -Xms100m -Xmx100m BenchmarkRunner
BanchmarkTestInt shift 10000 100 10
...
Runs: 100, Ave: 272, Min: 251, Max: 279 - Per step in nanoseconds

C:\herong\jvm>java -Xint -Xms100m -Xmx100m BenchmarkRunner
BanchmarkTestInt shift 10000 100 100
...
Runs: 100, Ave: 54, Min: 50, Max: 56 - Per step in nanoseconds

C:\herong\jvm>java -Xint -Xms100m -Xmx100m BenchmarkRunner
BanchmarkTestInt shift 10000 100 1000
...
Runs: 100, Ave: 32, Min: 32, Max: 33 - Per step in nanoseconds

C:\herong\jvm>java -Xint -Xms100m -Xmx100m BenchmarkRunner
BanchmarkTestInt shift 10000 100 10000
...
Runs: 100, Ave: 30, Min: 30, Max: 31 - Per step in nanoseconds

C:\herong\jvm>java -Xint -Xms100m -Xmx100m BenchmarkRunner
BanchmarkTestInt shift 10000 100 100000
...
Runs: 100, Ave: 30, Min: 29, Max: 31 - Per step in nanoseconds

C:\herong\jvm>java -Xint -Xms100m -Xmx100m BenchmarkRunner
BanchmarkTestInt shift 10000 100 1000000
...
Runs: 100, Ave: 30, Min: 28, Max: 31 - Per step in nanoseconds
```

Conclusions based on the test result:

• Now the loop runs 30 nanoseconds per step with a shift operation in the assignment statement.
• Clearly, the execution time of a shift operation, i<<1, is about 6 nanoseconds in interpreted-only mode. This conclusion can be arrived from test results of 10000, 100000 and 1000000 steps and minus the assignment loop execution time: 30 - 24 = 6 nanoseconds.

Last update: 2010.