最近,我一直在閱讀有關(guān)Java中的內(nèi)存分配方案的大量文章,并且由于我從各種來源中進行了閱讀,所以存在很多疑問。我已經(jīng)收集了我的概念,并要求仔細閱讀所有要點并對其進行評論。我知道內(nèi)存分配是特定于JVM的,因此我必須事先說,我的問題是特定于Sun的。類(由類加載器加載)放在堆上的特殊區(qū)域中:永久生成與類相關(guān)的所有信息,例如類的名稱,與該類關(guān)聯(lián)的對象數(shù)組,JVM使用的內(nèi)部對象(例如java / lang / Object)以及優(yōu)化信息,都進入了“永久生成”區(qū)域。所有靜態(tài)成員變量將再次保留在永久生成區(qū)域中。對象放在不同的堆上:年輕的一代每個類每個方法只有一個副本,該副本是靜態(tài)的還是非靜態(tài)的。該副本將放置在“永久生成”區(qū)域中。對于非靜態(tài)方法,所有參數(shù)和局部變量都進入堆棧-每當(dāng)對該方法進行具體調(diào)用時,我們都會獲得一個與之關(guān)聯(lián)的新堆??蚣堋N也淮_定靜態(tài)方法的局部變量存儲在哪里。他們在永世一代的堆上嗎?或者只是它們的引用存儲在“永久生成”區(qū)域中,而實際副本位于其他位置(在哪里?)我也不確定方法的返回類型存儲在哪里。如果對象(年輕一代)需要使用靜態(tài)成員(永久一代),則為它們提供對靜態(tài)成員的引用&&為它們提供足夠的存儲空間以存儲方法的返回類型等。謝謝你的經(jīng)歷!
添加回答
舉報
0/150
提交
取消