Linked Weak Reference Arrays
A Hybrid Approach to Efficient Bulk Finalization
Andrés Valloud
IWST 2015
Linked Weak Reference Arrays A Hybrid Approach to Efficient Bulk - - PowerPoint PPT Presentation
Linked Weak Reference Arrays A Hybrid Approach to Efficient Bulk Finalization Andrs Valloud IWST 2015 Weak arrays ivars Weak arrays ivars Weak arrays mourn ivars 0 Ephemerons key Ephemerons key Ephemerons mourn key
A Hybrid Approach to Efficient Bulk Finalization
Andrés Valloud
IWST 2015
ivars
ivars
ivars
mourn
key
key
key
mourn
Server Image GS Client
Server Image Ephemerons
Server Image Weak arrays
Ephemerons Weak arrays Evaluation Space required per client
at least one extra
negligible weak arrays much more compact VM cost per client object
finalization queue slot negligible weak arrays much more efficient in bulk Finalization cost per client
ephemerons finalized only as needed scanning for tombstones weak arrays induce linear search
Begin interaction End interaction
Begin interaction End interaction
Begin interaction End interaction
H E N C E N O T O M B S T O N E S S T R O N G C O P Y
Begin interaction End interaction
O R I G I N A L L Y W E A K S T R O N G A T T H I S T I M E W E A K O N C E A G A I N
isWeakContainer: false isWeakContainer: true
Begin mourning End mourning WeakArray>>mourn 1 to: self size do: [:eachIndex | (self at: eachIndex) == 0 ifTrue: [self mournAt: eachIndex] ]
Begin mourning End mourning
6 12 15
LinkedWeakArray
Begin mourning End mourning
6 12 15
LinkedWeakArray>>mourn | nextIndex | nextIndex := self firstTombstoneIndex. "6" [nextIndex == 0] whileFalse: [ self mournAt: nextIndex. nextIndex := self at: nextIndex "12, 15, 0" ]
Begin GC End mourning
O R I G I N A L L Y W E A K S T R O N G A T T H I S T I M E W E A K O N C E A G A I N
setWeakContainer(false); isWeakContainer: true VM queues for finalization LinkedWeakArray>>mourn
Mourning performance I
Quotient
0.0 0.6 1.3 1.9 2.6 3.2 3.9 4.5 5.2 5.8 6.5 7.1 7.8 8.4 9.1 9.7 10.4 11.0
Tombstoning rates
1 2 3 5 7 10
Tombstoning rates
2^8 2^20
Linked weak array sizes
2^4 2^14