[英]Pharo Smalltalk - Is there a way to force deallocation (dealloc) on an Object (instance) (expire sessions etc) during Seaside development?
當您要垃圾收集某個實例時,您可以發送什么消息?
我在一個基於Seaside的應用程序上亂砍,很多事情變得混亂,包括我的RootComponent有10個實例(這是正常的),我想要一個全新的開始(而不是一個新的映像)
以后的編輯:看了幾遍之后,顯然問題出在自動垃圾收集世界中,這是一場惡性循環,所以讓我改一下。
無法使VM垃圾收集特定對象。 您可以評估Smalltalk garbageCollect.
強制垃圾回收,但這只會觸發所有對象的VM垃圾回收機制。
通常有兩個問題(以我的經驗):
Smalltalk garbageCollect.
因此可能不足以實際刪除該對象。 您經常會看到3 timesRepeat: [ Smalltalk garbageCollect ].
代碼3 timesRepeat: [ Smalltalk garbageCollect ].
試圖確保收集到一個對象。 還要注意,某些特殊對象受到了垃圾回收的保護(例如nil
, true
, false
等)。 話雖如此,我們已經使用Seaside近十年了,垃圾回收通常是我們最不用擔心的問題之一。 當我們需要垃圾收集/清理的東西時,將變量設為零並強制垃圾收集(3次)就可以了。
在Seaside 2.8中,您可以評估WARegistry clearAllHandlers.
,在Seaside 3中大致相當於WAAdmin clearAll.
。 這些語句將清除活動會話和過期會話,並丟棄您可能會擔心的大多數內容。 注意: #clearAll
還將清除配置和注冊的入口點。 如果您只想重置會話,請使用#clearSessions
。 如果需要更徹底的清理,請使用#clearAll
。
使用myObject pointersTo.
查找指向特定對象的所有指針。 您也可以右鍵單擊GTInspector中的條目,然后單擊“打開指針”。
您可能還想檢查一下PointerDetective ,它試圖以圖形方式表示指針查找過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.