gpt4 book ai didi

java - 为什么 Java 方法调用在这里如此昂贵?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:42 25 4
gpt4 key购买 nike

<分区>

我有一个线程执行器实现,其中包装器的成本非常昂贵。有一个包装类 Task,其定义如下:

 class Task {
public Runnable r;
public Task(Runnable r) {
this.r = r;
}

public void run() {
r.run();
}

List<task> taskList;

对于以下情况,运行时间约为 800 毫秒。

  for (Task t : taskList) {                                                 
t.r.run();
}

而对于以下情况,它是 ~7000ms。

 for (Task t : taskList) {        
t.run();
}

它不是孤立发生的,而是发生在执行者的代码内部。只是想知道是否有人暗示可能会发生什么?

正在传递的 runnable 是此测试用例的以下内容:

class Tester implements Runnable {                                                 
int i;

public Tester(int i) {
this.i = i;
}

@Override
public void run() {
//System.out.println(i);
for (int j = 0; j < 1000000; j++) {
i = j;
}
}

public int getI() {
return i;
}

作为引用,代码可以在 github.com/sharvanath/TempThreadPool 上找到.运行 ThreadPoolTest 以获取执行结果。现在尝试更改 ThreadPool.java 的第 41 行,看看神奇之处。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com