0
我不是在談論進入同步塊的時間。 我正在討論執行MonitorEnter和MonitorExit語句的時間。 而且,我如何測量執行C(JNI)語句所需的時間? 我正在使用Eclipse和OSX開發Android應用程序。MonitorEnter是否耗時操作?
我不是在談論進入同步塊的時間。 我正在討論執行MonitorEnter和MonitorExit語句的時間。 而且,我如何測量執行C(JNI)語句所需的時間? 我正在使用Eclipse和OSX開發Android應用程序。MonitorEnter是否耗時操作?
當處理一個無爭議的鎖時,當前版本的Dalvik使用一個快速路徑來避免重量級線程同步操作。就速度而言,它可能與調用用Java編程語言編寫的CPU約束方法相同。
如果鎖有爭用(即有兩個或更多線程正在與它進行交互),那麼這最終會成爲一個更重的操作,從底層操作系統到底層操作系統的線程庫調用底層。也就是說,通常期望執行重量級線程操作的時間被鎖定的實際活動所控制(因爲如果活動不是相對較長時間的運行,那麼您不會很有可能在競爭中獲得有爭議的鎖第一名)。
一如既往,性能分析可以幫助您全面瞭解這一切。
如果你想在封面下看一眼,你可以在Android源代碼中找到platform/dalvik/vm/Sync.cpp>
的顯着代碼。尋找dvmLockObject
,雖然你必須徘徊到JIT編譯器代碼才能獲得更完整的故事。
Uhm ...''MonitorEnter' * *是啓動'synchronize'塊的操作。那麼你怎麼能談論一個,但不是另一個?另外:確切的時間取決於很多事情:實現,鎖是否存在爭議,是否可以完全優化,... – 2012-07-30 08:02:00
最後但並非最不重要的一點是:Dalvik VM與Java VM *相當*不同,*特別是當涉及到低級細節和優化時。在閱讀有關HotSpot或其他Java VM的答案時,請牢記這一點。 – 2012-07-30 08:03:04