簡體   English   中英

如何在Cuis / Squeak / Pharo中強制完成(用於測試)?

[英]How to force finalization (for testing) in Cuis/Squeak/Pharo?

我已經實現了一些ExternalStrctures(作為“ FFI工作”的一部分),對於其中的一些我想實現終結處理以回收外部存儲器。

我正在嘗試為此編寫一些測試,而且無論我用Smalltalk garbageCollect強制進行垃圾回收多少次,(顯然)決不會觸發終結處理。

為確保這一點,我在要從終結器調用的函數中放置了一個外部斷點(使用gdb),但從未擊中該斷點。 我還檢查了對對象的所有引用(運行了許多GC之后),唯一的引用是WeakRegistry(我使用allInstances到達了對象)。

有沒有辦法強制完成(在Cuis / Pharo / Squeak中)?

Smalltalk garbageCollect應該始終觸發完成。 如果對象是新對象,則Smalltalk garbageCollectMost也可能觸發它(取決於VM)。

請注意,終結處理由映像中的過程實現。 如果該進程由於某種原因未在運行,則不會最終確定。

同樣,VM歷史上也有不同的方式來發信號通知要完成的對象的圖像。 最初,完成過程將必須掃描所有弱對象,這很健壯但效率低下。 如今,VM和映像必須在找到最終確定對象的方法上達成共識。 如果這些不匹配,則完成可能不可靠。

我認為OpenCL.pck.st軟件包中的#testFinalization可能會有所幫助,至少作為一個工作實驗是可以的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM