[ruby-core:65056] [ruby-trunk - Bug #10244] Garbage Collector not being triggered

From: nobu@...
Date: 2014-09-16 03:11:07 UTC
List: ruby-core #65056
Issue #10244 has been updated by Nobuyoshi Nakada.


 On 2014/09/16 11:35, Michel Boaventura wrote:
 >>Ruby doesn't know about memories >`malloc`ed inside gdk library, so they >can't trigger GC.
 > 
 > But if ruby doesn't know about this allocations, how it can collect this memory if asked manually?
 
 The object itself knows how to release the resources it acquired.

----------------------------------------
Bug #10244: Garbage Collector not being triggered
https://bugs.ruby-lang.org/issues/10244#change-48924

* Author: Michel Boaventura
* Status: Third Party's Issue
* Priority: Normal
* Assignee: 
* Category: core
* Target version: 
* ruby -v: ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Hi all,

I'm trying to understand why this simple script doesn't trigger a single run of the GC and eats all memory:

```Ruby
require 'gdk3'

loop do
  Gdk::Pixbuf.new('foo.png')
end
```

Changing it just a little to print ```Ruby GC.stat[:count]``` shows a constant value always:

```Ruby
require 'gdk3'

i = 0
loop do
  i += 1
  Gdk::Pixbuf.new('foo.png')
  puts GC.stat[:count] if (i / 100).zero?
end
```
Moreover, if I manually run it, then the memory usage stays constant:

```Ruby
require 'gdk3'

loop do
  Gdk::Pixbuf.new('foo.png')
  GC.start
end
```

I understant that this is probably a gdk3 issue, but what is puzzling me is why GC isn't running automatically but if I start it manually everything works just fine.

Thank you!




-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next