--- a/src/JavaFinalizationRegistry.st Thu Aug 16 17:08:40 2012 +0000
+++ b/src/JavaFinalizationRegistry.st Thu Aug 16 17:16:59 2012 +0000
@@ -22,8 +22,8 @@
Object subclass:#JavaFinalizationRegistry
instanceVariableNames:'accessLock finalizationSemaphore finalizationProcess lastCGCcount
- lastIGCcount'
- classVariableNames:''
+ lastIGCcount skippedCycles'
+ classVariableNames:'SkipCycleLimit'
poolDictionaries:''
category:'Languages-Java-Support'
!
@@ -72,6 +72,18 @@
"
! !
+!JavaFinalizationRegistry class methodsFor:'initialization'!
+
+initialize
+ "Invoked at system start or when the class is dynamically loaded."
+
+ "/ please change as required (and remove this comment)
+
+ SkipCycleLimit := 10.
+
+ "Modified: / 16-08-2012 / 18:17:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!JavaFinalizationRegistry class methodsFor:'instance creation'!
new
@@ -87,8 +99,11 @@
| java_lang_ref_Finalizer ref refs objs living firstPendingReference lastPendingReference finished |
- lastCGCcount == ObjectMemory garbageCollectCount ifTrue:[ ^ self ].
- lastIGCcount == ObjectMemory incrementalGCCount ifTrue:[ ^ self ].
+ skippedCycles < SkipCycleLimit ifTrue:[
+ lastCGCcount == ObjectMemory garbageCollectCount ifTrue:[ skippedCycles := skippedCycles + 1. ^ self ].
+ lastIGCcount == ObjectMemory incrementalGCCount ifTrue:[ skippedCycles := skippedCycles + 1. ^ self ].
+ ].
+ skippedCycles := 0.
java_lang_ref_Finalizer := JavaVM classNamed:'java.lang.ref.Finalizer'.
java_lang_ref_Finalizer isNil ifTrue:[ ^ self ].
@@ -150,10 +165,12 @@
accessLock := RecursionLock new.
lastCGCcount := ObjectMemory garbageCollectCount.
lastIGCcount := ObjectMemory incrementalGCCount.
+ skippedCycles := 0.
+
"/ super initialize. -- commented since inherited method does nothing
- "Modified: / 16-08-2012 / 17:25:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 16-08-2012 / 18:18:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!JavaFinalizationRegistry methodsFor:'private'!
@@ -464,3 +481,5 @@
version_SVN
^ '$Id:: $'
! !
+
+JavaFinalizationRegistry initialize!