6. Thread 1 Thread n Thread m
… …
JVM Stack AreaPC
Method X
Method Y
Method Z
7. Thread 1 Thread n Thread m
… …
JVM Stack AreaPC
Method X
Method Y
Method Z
Operand Stack Local Variable
8. public int calc(int x) {
return 10 * x * Math.abs(x);
}
Runnable task = () -> {
...
int result = calc(2);
...
}
public int calc(int);
0: bipush 10
2: iload_1
3: imul
4: iload_1
5: invokestatic #1 // abs:(I)I
8: imul
9: ireturn
9. public int calc(int x) {
return 10 * x * Math.abs(x);
}
Runnable task = () -> {
...
int result = calc(2);
...
}
public int calc(int);
0: bipush 10
2: iload_1
3: imul
4: iload_1
5: invokestatic #1 // abs:(I)I
8: imul
9: ireturn
run ※ 実際にはラムダ式なので、run がコールされるわけではないです
calc
10. public int calc(int x) {
return 10 * x * Math.abs(x);
}
Runnable task = () -> {
...
int result = calc(2);
...
}
public int calc(int);
0: bipush 10
2: iload_1
3: imul
4: iload_1
5: invokestatic #1 // abs:(I)I
8: imul
9: ireturn
run ※ 実際にはラムダ式なので、run がコールされるわけではないです
calc
Operand Stack Local Variable
2
11. public int calc(int x) {
return 10 * x * Math.abs(x);
}
Runnable task = () -> {
...
int result = calc(2);
...
}
public int calc(int);
0: bipush 10
2: iload_1
3: imul
4: iload_1
5: invokestatic #1 // abs:(I)I
8: imul
9: ireturn
run ※ 実際にはラムダ式なので、run がコールされるわけではないです
calc
Operand Stack Local Variable
210
12. public int calc(int x) {
return 10 * x * Math.abs(x);
}
Runnable task = () -> {
...
int result = calc(2);
...
}
public int calc(int);
0: bipush 10
2: iload_1
3: imul
4: iload_1
5: invokestatic #1 // abs:(I)I
8: imul
9: ireturn
run ※ 実際にはラムダ式なので、run がコールされるわけではないです
calc
Operand Stack Local Variable
210
2
13. public int calc(int x) {
return 10 * x * Math.abs(x);
}
Runnable task = () -> {
...
int result = calc(2);
...
}
public int calc(int);
0: bipush 10
2: iload_1
3: imul
4: iload_1
5: invokestatic #1 // abs:(I)I
8: imul
9: ireturn
run ※ 実際にはラムダ式なので、run がコールされるわけではないです
calc
Operand Stack Local Variable
210
2
スタックから 2 つの数字をポップして掛け算
結果をスタックにプッシュ
14. public int calc(int x) {
return 10 * x * Math.abs(x);
}
Runnable task = () -> {
...
int result = calc(2);
...
}
public int calc(int);
0: bipush 10
2: iload_1
3: imul
4: iload_1
5: invokestatic #1 // abs:(I)I
8: imul
9: ireturn
run ※ 実際にはラムダ式なので、run がコールされるわけではないです
calc
Operand Stack Local Variable
220
15. public int calc(int x) {
return 10 * x * Math.abs(x);
}
Runnable task = () -> {
...
int result = calc(2);
...
}
public int calc(int);
0: bipush 10
2: iload_1
3: imul
4: iload_1
5: invokestatic #1 // abs:(I)I
8: imul
9: ireturn
run ※ 実際にはラムダ式なので、run がコールされるわけではないです
calc
Operand Stack Local Variable
220
2
16. public int calc(int x) {
return 10 * x * Math.abs(x);
}
Runnable task = () -> {
...
int result = calc(2);
...
}
public int calc(int);
0: bipush 10
2: iload_1
3: imul
4: iload_1
5: invokestatic #1 // abs:(I)I
8: imul
9: ireturn
run ※ 実際にはラムダ式なので、run がコールされるわけではないです
calc
Operand Stack Local Variable
220
2
スタックからポップした数値を引数にして
static メソッドをコール
17. public int calc(int x) {
return 10 * x * Math.abs(x);
}
Runnable task = () -> {
...
int result = calc(2);
...
}
public int calc(int);
0: bipush 10
2: iload_1
3: imul
4: iload_1
5: invokestatic #1 // abs:(I)I
8: imul
9: ireturn
run ※ 実際にはラムダ式なので、run がコールされるわけではないです
calc
Operand Stack Local Variable
2
abs
20
18. public int calc(int x) {
return 10 * x * Math.abs(x);
}
Runnable task = () -> {
...
int result = calc(2);
...
}
public int calc(int);
0: bipush 10
2: iload_1
3: imul
4: iload_1
5: invokestatic #1 // abs:(I)I
8: imul
9: ireturn
run ※ 実際にはラムダ式なので、run がコールされるわけではないです
calc
Operand Stack Local Variable
2
abs
20
この状態を保存
19. java.lang.Exception: Stack trace
at java.base/java.lang.Thread.dumpStack(Thread.java:1537)
at java.base/java.lang.Continuation.yield(Continuation.java:396)
at java.base/java.lang.Fiber.maybePark(Fiber.java:597)
at java.base/java.lang.Fiber.parkNanos(Fiber.java:559)
at java.base/java.lang.Fiber.sleepNanos(Fiber.java:1039)
at java.base/java.lang.Thread.sleep(Thread.java:380)
at Test.lambda$new$0(Test.java:14)
at java.base/java.lang.Fiber.lambda$new$0(Fiber.java:198)
at java.base/java.lang.Continuation.enter(Continuation.java:372) Fibers
at java.base/java.lang.Continuation.run(Continuation.java:328)
at java.base/java.lang.Fiber.runContinuation(Fiber.java:366)
at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1425)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1017)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1666)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1599)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:189)
Task
Thread