1. A method for automatically identifying computer system performance bottlenecks and/or excess idle time, comprising: collecting information associated with runtime execution of a computer system; inferring, using a processor, one or more execution states of one or more tasks within the system based on the information, wherein the one or more execution states comprises one or more of runnable thread states and waiting thread states, wherein the inferring further comprises extracting one or more monitors, the monitors being programming objects that achieve synchronization in concurrent programming, the one or more extracted monitors providing information as to what threads are waiting on a critical section, and wherein the inferred one or more execution states provide information as to what a method on a stack associated with the runtime execution is doing.