2012-03-29 46 views
2

我想确定上下文切换对我的Java线程的影响。因此,我必须首先知道“它被抢占了多少次?”其次,如果可能的话,“我的线程停止执行多久了?”。我非常怀疑这可以从Java完成,但是嘿!有趣的事情是做不可能的事,对吧? :)即使如果我必须重新编译VM或使用某种LINUX工具或黑客,我会很高兴。所以现在我们知道这是不可能完成的,我们来做吧。 :)计算线程被抢占了多少次?

编辑:加油的人。另一个问题是与优先事项有关。我想你只是喜欢简单而无聊的问题。问题是清楚而有效的。

+2

这很像我过早的优化。您正在询问正常JVM不提供的事情。你能编辑你的问题并解释你为什么需要这样做吗? – Gray 2012-03-29 16:44:14

+1

可能的重复http://stackoverflow.com/questions/9916876/is-it-possible-to-create-a-high-priority-thread-with-a-regular-jvm-one-that-wil – Gray 2012-03-29 16:44:37

+1

即使它可以完成,但几乎没有任何价值。它将很大程度上取决于你测试的CPU,加上很多其他的环境因素,以及你正在测试的代码的可变性。 – ControlAltDel 2012-03-29 16:46:12

回答

4

如果你能找到Linux的TID(线程ID)为Java线程你感兴趣的(假设你的JVM的地图Java线程上的Linux线程),那么伪文件/proc/<tid>/status包含很多统计数据,包括voluntary_ctxt_switchesnonvoluntary_ctxt_switches

+0

真棒!人们想要结束这个问题。 ts ts ts – JohnPristine 2012-03-31 15:40:54

2

它显然不会做你想要的一切,但你可能会发现ThreadMXBeanjava.lang.management可用。

+0

这已经是事了。如果争用时间增加意味着线程被阻塞/中断。人们想要结束这个问题。 ts ts ts – JohnPristine 2012-03-29 18:59:23