Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 41 additions & 8 deletions src/gc.cr
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,47 @@ fun __crystal_realloc64(ptr : Void*, size : UInt64) : Void*
end

module GC
record Stats,
# collections : UInt64,
# bytes_found : Int64,
heap_size : UInt64,
free_bytes : UInt64,
unmapped_bytes : UInt64,
bytes_since_gc : UInt64,
total_bytes : UInt64
struct Stats
Comment thread
ysbaddaden marked this conversation as resolved.
# The system memory allocated by the GC for its HEAP, in bytes. The memory
# may or may not have been allocated by the OS (for example some pages
# haven't been accessed). The number can grow and shrink as needed by the
# process.
getter heap_size : UInt64

# Approximate number of free bytes in the GC HEAP. The number is relative to
# the `#heap_size`. The reported value is pessimistic, there might be more
# free bytes in reality.
getter free_bytes : UInt64

# The size (in bytes) of virtual system memory that the GC returned to the
# OS when shrinking its HEAP. The OS may have reclaimed the memory already,
# reducing the resident memory usage, or may do so later (for example on
# memory pressure). The GC will reuse this memory when it needs to grow its
# HEAP again.
getter unmapped_bytes : UInt64

# Total memory allocated by the GC into its HEAP since the last GC
# collection, in bytes.
getter bytes_since_gc : UInt64

# Total memory allocated by the GC into its HEAP since the program started,
# in bytes. The number keeps growing indefinitely until the integer wraps
# back to zero.
getter total_bytes : UInt64

def initialize(@heap_size, @free_bytes, @unmapped_bytes, @bytes_since_gc, @total_bytes)
end

@[Deprecated]
def copy_with(heap_size = @heap_size, free_bytes = @free_bytes, unmapped_bytes = @unmapped_bytes, bytes_since_gc = @bytes_since_gc, total_bytes = @total_bytes)
self.class.new(heap_size, free_bytes, unmapped_bytes, bytes_since_gc, total_bytes)
end

@[Deprecated]
def clone
self.class.new(@heap_size.clone, @free_bytes.clone, @unmapped_bytes.clone, @bytes_since_gc.clone, @total_bytes.clone)
end
end

record ProfStats,
heap_size : UInt64,
Expand Down