物件為什麼活在記憶體的解析
JVM上物件是以引用來相互關聯,而引用與地址相關,但與key無關。每次載入同一個key/value會得到不同的引用,所以物件不能隨便死亡,一旦死亡就脫離關係。我們腦海中物件的邏輯關係是key中的關係,並非引用關係,所以key關係與引用關係相一致的時候,就是在記憶體中。
按道理,我們是應該在key關係中找到目標key(key就是實體),再透過這個key來獲得引用,再獲得相應物件,這樣物件關係就不會受限於引用。但在
這樣的程式碼中,b儲存的是引用,並非key,所以在能夠保持物件關係中,最後一層就是記憶體。
Key指引邏輯關係,引用指引記憶體關係。過去所謂的物件持久化,即是去除引用關係,儲存邏輯關係。而物件還原時,需要重塑記憶體關係,而剛好重塑記憶體關係是最費勁,最沒效率的,很明顯要解決這樣的問題,就是以記憶體為基本活動空間,把記憶體關係重塑儘可能迴避掉,如只在啟動載入時。
最後可以得出,判斷物件活動的地方,可透過物件關係的實現手段(引用),來判斷物件的存活地方(記憶體)。
按道理,我們是應該在key關係中找到目標key(key就是實體),再透過這個key來獲得引用,再獲得相應物件,這樣物件關係就不會受限於引用。但在
a{ b getb(){ return b; } } <p class="indent"> |
這樣的程式碼中,b儲存的是引用,並非key,所以在能夠保持物件關係中,最後一層就是記憶體。
Key指引邏輯關係,引用指引記憶體關係。過去所謂的物件持久化,即是去除引用關係,儲存邏輯關係。而物件還原時,需要重塑記憶體關係,而剛好重塑記憶體關係是最費勁,最沒效率的,很明顯要解決這樣的問題,就是以記憶體為基本活動空間,把記憶體關係重塑儘可能迴避掉,如只在啟動載入時。
最後可以得出,判斷物件活動的地方,可透過物件關係的實現手段(引用),來判斷物件的存活地方(記憶體)。
相關文章
- Java是否可以棧上分配物件記憶體? 為什麼?Java物件記憶體
- MongoDB 如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- MongoDB如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- Java記憶體模型是什麼,為什麼要有Java記憶體模型,Java記憶體模型解決了什麼問題?Java記憶體模型
- SQL Server為什麼這麼耗記憶體SQLServer記憶體
- 什麼是記憶體記憶體
- 為什麼 Linux 需要虛擬記憶體Linux記憶體
- 面試官:為什麼需要Java記憶體模型?面試Java記憶體模型
- 為什麼暫存器比記憶體快?記憶體
- 什麼是Java記憶體模型(JMM)中的主記憶體和本地記憶體?Java記憶體模型
- 為什麼說列舉更佔記憶體,列舉原理是什麼?記憶體
- Java記憶體模型FAQ(一) 什麼是記憶體模型Java記憶體模型
- 為什麼總出現記憶體不能為“read”的錯誤提示記憶體
- 從原始碼解析-掌握AsyncTask工作原理 為什麼序列執行和記憶體洩漏原始碼記憶體
- 物件記憶體圖物件記憶體
- 什麼是Java記憶體模型?Java記憶體模型
- 什麼是Java記憶體模型Java記憶體模型
- 物件的記憶體佈局物件記憶體
- Spark中的記憶體計算是什麼?Spark記憶體
- 顯示卡的視訊記憶體是什麼?記憶體
- Android記憶體分配/回收的一個問題-為什麼記憶體使用很少的時候也GCAndroid記憶體GC
- Java記憶體模型FAQ(五)舊的記憶體模型有什麼問題?Java記憶體模型
- [譯] WebAssembly中的記憶體(為什麼它比你想象的更安全)Web記憶體
- Python如何管理記憶體?記憶體分配機制是什麼?Python記憶體
- 解析Java物件引用與JVM自動記憶體管理(轉)Java物件JVM記憶體
- 虛擬記憶體有什麼用 虛擬記憶體不足怎麼解決記憶體
- Java物件記憶體模型Java物件記憶體模型
- Java 物件記憶體分析Java物件記憶體
- JVM -- 物件的記憶體佈局JVM物件記憶體
- Java物件的記憶體佈局Java物件記憶體
- 物件的建立與記憶體分配物件記憶體
- .NET物件的記憶體佈局物件記憶體
- 電腦記憶體選購知識,什麼樣的記憶體適合自己?記憶體
- win10為硬體保留的記憶體怎麼釋放 win10取消為硬體保留的記憶體怎麼操作Win10記憶體
- 教你如何擴大電腦的虛擬記憶體? 什麼是虛擬記憶體?記憶體
- 為什麼主開機記錄的記憶體地址是 0x7C00?記憶體
- 為什麼主開機記錄的記憶體地址是0x7C00?記憶體
- Python記憶體檢視是什麼Python記憶體