Class: Rspeckled::Ruby::DeferredGarbageCollection

Inherits:
Object
  • Object
show all
Defined in:
lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb

Constant Summary collapse

THRESHOLD =
(ENV['DEFER_GC'] || 20.0).to_f

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.garbage_last_collected_atObject



43
44
45
# File 'lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb', line 43

def self.garbage_last_collected_at
  @garbage_last_collected_at || ::Time.now
end

Class Method Details

.cycle_garbage_collectorObject



25
26
27
28
29
# File 'lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb', line 25

def self.cycle_garbage_collector
  ::GC.enable
  ::GC.start
  ::GC.disable
end

.enabled?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb', line 35

def self.enabled?
  THRESHOLD.positive?
end

.over_deferrment_threshold?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb', line 31

def self.over_deferrment_threshold?
  time_since_garbage_last_collected >= THRESHOLD
end

.reconsiderObject



17
18
19
20
21
22
23
# File 'lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb', line 17

def self.reconsider
  return unless enabled? && over_deferrment_threshold?

  cycle_garbage_collector

  self.garbage_last_collected_at = ::Time.now
end

.startObject



13
14
15
# File 'lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb', line 13

def self.start
  cycle_garbage_collector if enabled?
end

.time_since_garbage_last_collectedObject



39
40
41
# File 'lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb', line 39

def self.time_since_garbage_last_collected
  ::Time.now - garbage_last_collected_at
end