小编Sha*_*ath的帖子

10
推荐指数
1
解决办法
3600
查看次数

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

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

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

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

 List<task> taskList;
Run Code Online (Sandbox Code Playgroud)

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

  for (Task t : taskList) {                                                 
           t.r.run();                 
    }
Run Code Online (Sandbox Code Playgroud)

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

 for (Task t : taskList) {        
           t.run();                                                              
 }
Run Code Online (Sandbox Code Playgroud)

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

对于此测试用例,传递的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 …
Run Code Online (Sandbox Code Playgroud)

java

8
推荐指数
1
解决办法
268
查看次数