Created
May 18, 2020 13:46
-
-
Save purplefox/82b37a9a7587c267fa4e4e19733722cc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.ArrayList; | |
import java.util.List; | |
import java.util.concurrent.atomic.AtomicLong; | |
public class Main { | |
public static void main(String[] args) { | |
try { | |
new Main().doIt(); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
private void doIt() throws Exception { | |
var tot = new AtomicLong(); | |
var c = new AtomicLong(); | |
List<Thread> threads = new ArrayList<>(); | |
for (var i = 0; i < 5000000; i++) { | |
final long l = i; | |
Thread t = Thread.startVirtualThread(() -> { | |
long res = method1(l, l + 1, l + 2, l + 3); | |
tot.addAndGet(res); | |
c.incrementAndGet(); | |
}); | |
threads.add(t); | |
} | |
long start = System.currentTimeMillis(); | |
while (System.currentTimeMillis() - start < 10000) { | |
printMemory(); | |
Thread.sleep(1000); | |
} | |
System.out.println("Waiting for threads to complete"); | |
for (Thread t: threads) { | |
t.join(); | |
} | |
System.out.println("Threads complete"); | |
System.out.println(tot.get()); | |
System.out.println(c.get()); | |
} | |
long method1(long l1, long l2, long l3, long l4) { | |
return method2(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method2(long l1, long l2, long l3, long l4) { | |
return method3(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method3(long l1, long l2, long l3, long l4) { | |
return method4(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method4(long l1, long l2, long l3, long l4) { | |
return method5(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method5(long l1, long l2, long l3, long l4) { | |
return method6(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method6(long l1, long l2, long l3, long l4) { | |
return method7(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method7(long l1, long l2, long l3, long l4) { | |
return method8(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method8(long l1, long l2, long l3, long l4) { | |
return method9(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method9(long l1, long l2, long l3, long l4) { | |
return method10(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method10(long l1, long l2, long l3, long l4) { | |
return method11(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method11(long l1, long l2, long l3, long l4) { | |
return method12(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method12(long l1, long l2, long l3, long l4) { | |
return method13(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method13(long l1, long l2, long l3, long l4) { | |
return method14(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method14(long l1, long l2, long l3, long l4) { | |
return method15(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method15(long l1, long l2, long l3, long l4) { | |
return method16(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method16(long l1, long l2, long l3, long l4) { | |
return method17(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method17(long l1, long l2, long l3, long l4) { | |
return method18(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method18(long l1, long l2, long l3, long l4) { | |
return method19(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method19(long l1, long l2, long l3, long l4) { | |
return method20(l1 + 1, l2 + 1, l3 + 1, l4 + 1) + l1 + l2 + l3 + l4; | |
} | |
long method20(long l1, long l2, long l3, long l4) { | |
try { | |
Thread.sleep(10000); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
return l1 + l2 + l3 + l4; | |
} | |
private void printMemory() { | |
System.out.println("Total memory: " + Runtime.getRuntime().totalMemory()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment