分析Java应用程序:递归方法的累积时间

时间:2012-07-19 15:27:34

标签: java profiling visualvm

使用ArrayBlockingQueue来考虑这个生产者 - 消费者代码:我想知道 一个。 put() / take()整体消耗的总时间是多少? 湾put()take()来电等待的总时间是多少?被阻止?

在VisualVM中拍摄快照只显示运行深度(),但不显示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 个答案:

答案 0 :(得分:1)

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