mirror of
https://github.com/corda/corda.git
synced 2025-01-03 19:54:13 +00:00
test/MemoryRamp.java: demonstrate slow multithreaded memory access.
This commit is contained in:
parent
86648ea054
commit
26547f08b6
66
test/MemoryRamp.java
Normal file
66
test/MemoryRamp.java
Normal file
@ -0,0 +1,66 @@
|
||||
/**
|
||||
* Demonstrates slow multithreaded memory access.
|
||||
*/
|
||||
public class MemoryRamp implements Runnable {
|
||||
|
||||
private static final int ARRAY_SIZE = 10 * 1024 * 1024; //10 MB in byte
|
||||
private static final boolean ACCESS_ARRAY = true;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
mem();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
// get timing for single thread
|
||||
long singleTime = mem();
|
||||
System.out.println("Single thread: " + singleTime + "ms");
|
||||
|
||||
// run the same method with different thread numbers
|
||||
for (int threadCount : new int[] {2, 3, 4}) {
|
||||
long time = memMulti(threadCount);
|
||||
double timeFactor = 1.0 * singleTime * threadCount / time;
|
||||
System.out.println(threadCount + " threads: " + time + "ms (" + timeFactor + "x)");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and accesses a ARRAY_SIZE big byte[].
|
||||
* @return time to create and access array in milliseconds
|
||||
*/
|
||||
private static long mem() {
|
||||
long start = System.currentTimeMillis();
|
||||
final byte[] array = new byte[ARRAY_SIZE];
|
||||
if (ACCESS_ARRAY) {
|
||||
for (int i = 0; i < array.length; i++) {
|
||||
//array[i] = (byte) 170; //write
|
||||
byte x = array[i]; //read
|
||||
}
|
||||
}
|
||||
return System.currentTimeMillis() - start;
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts multiple threads and runs mem() in each one.
|
||||
* @return total time for all threads
|
||||
*/
|
||||
private static long memMulti(int numOfThreads) {
|
||||
Thread[] threads = new Thread[numOfThreads];
|
||||
long start = System.currentTimeMillis();
|
||||
|
||||
for (int i = 0; i < threads.length; i++) {
|
||||
threads[i] = new Thread(new MemoryRamp(), "mem-");
|
||||
threads[i].start();
|
||||
}
|
||||
|
||||
try {
|
||||
for (Thread thread : threads) {
|
||||
thread.join();
|
||||
}
|
||||
}
|
||||
catch (InterruptedException iex) {
|
||||
throw new RuntimeException(iex);
|
||||
}
|
||||
return System.currentTimeMillis() - start;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user