我不是在谈论进入同步块的时间。 我说的是执行MonitorEnter和MonitorExit语句的时间。 而且,我如何衡量在C(JNI)中执行语句所需的时间? 我正在使用Eclipse和OSX开发Android应用程序。
答案 0 :(得分:1)
当处理无争议的锁时,当前版本的Dalvik使用快速路径来避免重量级线程同步操作。就速度而言,它可能与调用用Java编程语言编写的短CPU绑定方法大致相同。
如果锁有争议(即两个或多个线程正在与它交互),那么这最终会成为一个重量级更重的操作,从而作为对底层操作系统的线程库的调用触底而来。也就是说,通常期望重量级线程操作所花费的时间由被锁定的实际活动所主导(因为如果活动不是相对长时间运行,那么你就不会有可能有一个有争议的锁定第一名)。
与往常一样,分析可以帮助您全面了解。
如果您想查看封面,您可以在Android来源的platform/dalvik/vm/Sync.cpp>
中找到显着的代码。寻找dvmLockObject
,虽然你将不得不徘徊在JIT编译器代码中以获得更完整的故事。