评测Java应用程序:递归方法的累积时间



考虑使用ArrayBlockingQueue的生产者-消费者代码:我想找出a.put()/take()总共消耗了多少时间?b.put()take()呼叫在等待中总共花费了多少时间?被阻止?

在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();
        }
    });

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

最新更新