在着名的實踐中的Java Concurrency第2.4節中,它指出內部鎖定方法與顯式鎖定不同是一個糟糕的設計決策,因爲它的混淆和「......它迫使JVM實現者在對象大小和鎖定之間進行權衡性能。」 有人可以解釋如何對象大小影響鎖定性能?Java中的對象大小和鎖定性能之間是否存在關係?
6
A
回答
5
那麼因爲每個對象都可以鎖定,這意味着每個對象都必須有足夠的位置來存儲鎖定時需要的所有信息。
這是相當沒有吸引力的,因爲絕大多數的物體永遠不會被鎖定,所以我們浪費了大量的空間。所以在實踐中,Hotspot通過使用2位來記錄對象的狀態並根據這兩位重用對象頭的其餘部分來解決這個問題。
然後是整個偏向/無偏向鎖定的東西..好吧,你可以開始閱讀關於它here。熱點文檔不是我所謂的擴展,但鎖定和對象頭文件比其他大多數代碼更好。但有疑問:閱讀源代碼。
PS:我們也有類似的問題,也是每個對象的本地哈希碼。如果你的GC洗牌的話,「只用內存地址」就不太好。 (但是與鎖定相反,如果我們需要此功能,則沒有真正的選擇)
2
最有效的鎖使用原生字大小,例如32位字段。但是,您不希望將4個字節添加到每個對象,而是使用AFAIK 1位,但設置此位比設置字大小更昂貴。
相關問題
- 1. java包和目錄之間是否存在一對一的關係?
- 2. JAVA - 兩個對象之間的關係
- 3. 使用ScaleTransform和直接設置大小之間是否存在性能差異?
- 4. 數據庫表和麪向對象類之間是否存在關係?
- 5. 假設隱式和顯式打印之間的性能差異與對象大小有關是否安全?
- 6. 鎖定LOH中的對象是否影響GC性能?
- 7. 什麼gettable,可設定和存儲性能之間的關係,計算性能
- 8. 在Java對象和類之間的關係
- 9. DFA和Loop,NFA和遞歸之間是否存在關係?
- 10. 在Java中使用大量對象是否存在性能問題
- 11. 鎖定(this)和靜態對象鎖定之間的區別
- 12. 操作系統中頁面大小和頁面大小之間的關係
- 13. RAM大小和虛擬內存之間的關係與JVM堆大小
- 14. 在Java中,新建和本地之間是否存在性能差異?
- 15. 圖像大小和字體大小之間的關係是什麼?
- 16. Java對象和類/接口之間的關係程度?
- 17. 核心數據 - 找出兩個對象之間是否存在關係
- 18. schema.org數據集和wikidata之間是否存在映射關係?
- 19. schema.org和WAI-ARIA之間是否存在關係?
- 20. 視圖和模型之間是否存在依賴關係?
- 21. RTTI和異常之間是否存在關係?
- 22. DOM元素和HTML元素之間是否存在1對1的關係?
- 23. 對象實例和同步的管家數據中的鎖定信息之間的關係是什麼?
- 24. 在android中TextView的字體大小和高度之間的關係是什麼?
- 25. JAVA中Synchronized和Final之間的關係
- 26. concat和||之間是否存在性能差異?在oracle
- 27. C++對象是否有固定大小?
- 28. Java:字體的點大小與其渲染範圍之間是否存在線性關聯?
- 29. Java中的runLater塊之間是否存在併發性?
- 30. RenderPartial和Partial之間是否有任何大的性能差異?
與'synchronized'類型的鎖應該沒有關係(從我的實現經驗來看),並且從簡要回顧Java 5鎖定方案,我不會直接看到那裏可能存在依賴關係。當然,它實際上需要更多的存儲空間來實現單獨的'Lock'對象,但這應該是一個固定的開銷。 – 2011-12-29 16:02:47
@HotLicks多數民衆贊成在我感到驚訝,大小shudnt有任何額外的開銷,謝謝! – meer 2011-12-30 11:22:57