2012-07-19 76 views
0

考虑使用此生产者 - 消费者代码ArrayBlockingQueue:我想查找 a。整体消耗了多少总时间put()/take()? b。 put()take()电话在等待中花费了多少时间?阻止?分析Java应用程序:递归方法的累积时间

在VisualVM中创建快照只显示深度为run(),而不是调用的深度为put()/take()。任何想法如何获得这些时间?

一般来说,如何从main()递归降低所有方法的累积运行时间?

final BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(QUEUE_SIZE); 
    ExecutorService exec = Executors.newFixedThreadPool(2); 
    exec.submit(new Runnable() { 
     int i =0; 
     @Override 
     public void run() { 
      while(i++<NUM) 
       try { 
        queue.put(i); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

     } 
    }); 

    exec.submit(new Runnable() { 
     int i =0; 
     @Override 
     public void run() { 
      while(i++<NUM) 
       try { 
        queue.take(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      consumerFinished.countDown(); 
     } 
    }); 

回答

1

您需要更改“CPU设置”过滤掉属于java.*包中的所有代码。检查“采样器”选项卡上的“设置”,并编辑新预设中的“CPU设置”。预设在CPU设置选项卡的底部进行管理。