| KiokuDB documentation | Contained in the KiokuDB distribution. |
KiokuDB::GC::Naive - Naive mark and sweep garbage collection
use KiokuDB::GC::Naive;
my $gc = KiokuDB::GC::Naive->new(
backend => $backend,
);
$backend->delete( $gc->garbage->members );
This class implements full mark and sweep garbage collection for a backend supporting KiokuDB::Backend::Role::Scan.
| KiokuDB documentation | Contained in the KiokuDB distribution. |
#!/usr/bin/perl package KiokuDB::GC::Naive; use Moose; use KiokuDB::GC::Naive::Mark; use KiokuDB::GC::Naive::Sweep; use namespace::clean -except => 'meta'; with qw(KiokuDB::Role::Verbosity); has backend => ( does => "KiokuDB::Backend::Role::Scan", is => "ro", required => 1, ); has [qw(mark_scan sweep_scan)] => ( is => "ro", lazy_build => 1, ); sub _build_mark_scan { my $self = shift; KiokuDB::GC::Naive::Mark->new( backend => $self->backend, verbose => $self->verbose, ); } sub _build_sweep_scan { my $self = shift; my $mark_results = $self->mark_results; $self->v("sweeping...\n"); KiokuDB::GC::Naive::Sweep->new( backend => $self->backend, verbose => $self->verbose, mark_results => $mark_results, ); } has mark_results => ( isa => "KiokuDB::GC::Naive::Mark::Results", is => "ro", handles => qr/.*/, lazy_build => 1, ); sub _build_mark_results { my $self = shift; $self->v("marking reachable objects...\n"); return $self->mark_scan->results; } has sweep_results => ( isa => "KiokuDB::GC::Naive::Sweep::Results", is => "ro", handles => qr/.*/, lazy_build => 1, ); sub _build_sweep_results { my $self = shift; return $self->sweep_scan->results; } __PACKAGE__->meta->make_immutable; __PACKAGE__ __END__