我不是在谈论进入同步块的时间。我说的是执行 MonitorEnter 和 MonitorExit 语句的时间。而且,我如何测量在 C(JNI) 中执行语句所需的时间?我正在使用 Eclipse 和 OSX 开发 Android 应用程序。
问问题
263 次
1 回答
1
在处理无竞争锁时,当前版本的 Dalvik 使用了快速路径,避免了重量级线程同步操作。就速度而言,它可能与调用一个用 Java 编程语言编写的、受 CPU 限制的简短方法大致相同。
如果锁是有争议的(即,两个或更多线程正在与之交互),那么这最终会成为一个更重的操作,作为对底层操作系统线程库的调用,VM 触底。也就是说,通常预计执行重量级线程操作所花费的时间将由被锁定的实际活动所支配(因为如果活动不是相对长时间运行,那么您就不太可能有有争议的锁定第一名)。
与往常一样,分析可以帮助您弄清楚这一切。
如果您想深入了解,可以platform/dalvik/vm/Sync.cpp>
在 Android 源代码中找到显着代码。寻找dvmLockObject
,尽管您必须深入了解 JIT 编译器代码才能获得更完整的故事。
于 2012-07-30T21:42:45.967 回答