src/JavaFinalizationRegistry.st
branchjk_new_structure
changeset 1613 eaeeae3db7ec
parent 1612 ba527b3b17aa
child 1617 bc02a3b4cad8
--- 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!