Consider this producer-consumer code using a ArrayBlockingQueue
: I want to find out
a. How much total time is consumed by put()
/take()
overall ?
b. how much total time is spent by the put()
and take()
calls in waiting ? Blocked ?
Taking a snapshot in VisualVM only shows upto a depth of run() , but not the put()
/ take()
calls. Any idea how to get these times ?
In general , how do I get cumulative running times for all methods recursively down from the 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();
}
});
You need to change the "CPU settings" that filter out all code belonging java.*
packages. Check "Settings" on the "Sampler" tab and edit the "CPU settings" in a new preset. Presets are managed at the bottom of the CPU-settings tab.