我在閱讀B. Goetz's Java concurrency in pratice現在我在關於鎖定的部分。他說,與固有鎖同步
,每個對象都有一個內置的鎖只是一個方便 ,讓你不必明確創建鎖objects.9
9回想起來其實這樣的設計決策可能是一個壞的問題:它不僅會令人困惑,而且會迫使JVM實現者在對象大小和鎖定性能之間進行權衡。
因爲,我是新來的併發性,他不清楚他在說什麼設計決定。從性能角度來看,創建顯式鎖定對象是不好的,不是嗎?
我在閱讀B. Goetz's Java concurrency in pratice現在我在關於鎖定的部分。他說,與固有鎖同步
,每個對象都有一個內置的鎖只是一個方便 ,讓你不必明確創建鎖objects.9
9回想起來其實這樣的設計決策可能是一個壞的問題:它不僅會令人困惑,而且會迫使JVM實現者在對象大小和鎖定性能之間進行權衡。
因爲,我是新來的併發性,他不清楚他在說什麼設計決定。從性能角度來看,創建顯式鎖定對象是不好的,不是嗎?
我從來沒有自己實現過一個JVM,甚至沒有參與過它的開發,但我可以想象這個權衡。
想到將內部鎖與每個對象相關聯的第一個想法就是:將鎖與其狀態(我是否被鎖定,由哪個線程)關聯到JVM中創建的每個對象,與其餘的對象狀態共處。這應該是有效的,但是,它也會使每個創建的對象在內存中佔用額外的空間,並且該空間大部分時間都不會被使用(因爲同步不常見,並且大多數對象從不用作鎖) 。
另一種想法是維護某種單獨的延遲字典,只有當該對象實際用作鎖時,纔會爲對象創建鎖及其狀態。這很明顯,可能效率較低,因爲字典需要與對象並行維護等,但它會佔用較少的內存空間。
因此,我認爲這是Brian Goetz談論的權衡(或權衡的一部分)。它確實不那麼令人困惑,如果只有特定的對象可以充當鎖,那麼實現可能會更簡單。
啊,現在我看到了權衡。非常感謝。 –
決定每個對象都有一個內置鎖。這就是他正在談論的。 – Fildor
這是我猜不是所有的對象都需要併發鎖定,所以它消耗的內存更多。多餘的東西總是會影響性能。因爲即使你沒有使用它們,你也需要管理它們。 – YoungHobbit