[#14696] Inconsistency in rescuability of "return" — Charles Oliver Nutter <charles.nutter@...>

Why can you not rescue return, break, etc when they are within

21 messages 2008/01/02
[#14699] Re: Inconsistency in rescuability of "return" — Gary Wright <gwtmp01@...> 2008/01/02

[#14738] Enumerable#zip Needs Love — James Gray <james@...>

The community has been building a Ruby 1.9 compatibility tip list on

15 messages 2008/01/03
[#14755] Re: Enumerable#zip Needs Love — Martin Duerst <duerst@...> 2008/01/04

Hello James,

[#14772] Manual Memory Management — Pramukta Kumar <prak@...>

I was thinking it would be nice to be able to free large objects at

36 messages 2008/01/04
[#14788] Re: Manual Memory Management — Marcin Raczkowski <mailing.mr@...> 2008/01/05

I would only like to add that RMgick for example provides free method to

[#14824] Re: Manual Memory Management — MenTaLguY <mental@...> 2008/01/07

On Sat, 5 Jan 2008 15:49:30 +0900, Marcin Raczkowski <mailing.mr@gmail.com> wrote:

[#14825] Re: Manual Memory Management — "Evan Weaver" <evan@...> 2008/01/07

Python supports 'del reference', which decrements the reference

[#14838] Re: Manual Memory Management — Marcin Raczkowski <mailing.mr@...> 2008/01/08

Evan Weaver wrote:

[#14911] Draft of some pages about encoding in Ruby 1.9 — Dave Thomas <dave@...>

Folks:

24 messages 2008/01/10

[#14976] nil encoding as synonym for binary encoding — David Flanagan <david@...>

The following just appeared in the ChangeLog

37 messages 2008/01/11
[#14977] Re: nil encoding as synonym for binary encoding — Yukihiro Matsumoto <matz@...> 2008/01/11

Hi,

[#14978] Re: nil encoding as synonym for binary encoding — Dave Thomas <dave@...> 2008/01/11

[#14979] Re: nil encoding as synonym for binary encoding — David Flanagan <david@...> 2008/01/11

Dave Thomas wrote:

[#14993] Re: nil encoding as synonym for binary encoding — Dave Thomas <dave@...> 2008/01/11

[#14980] Re: nil encoding as synonym for binary encoding — Gary Wright <gwtmp01@...> 2008/01/11

[#14981] Re: nil encoding as synonym for binary encoding — Yukihiro Matsumoto <matz@...> 2008/01/11

Hi,

[#14995] Re: nil encoding as synonym for binary encoding — David Flanagan <david@...> 2008/01/11

Yukihiro Matsumoto writes:

[#15050] how to "borrow" the RDoc::RubyParser and HTMLGenerator — Phlip <phlip2005@...>

Core Rubies:

17 messages 2008/01/13
[#15060] Re: how to "borrow" the RDoc::RubyParser and HTMLGenerator — Eric Hodel <drbrain@...7.net> 2008/01/14

On Jan 13, 2008, at 08:54 AM, Phlip wrote:

[#15062] Re: how to "borrow" the RDoc::RubyParser and HTMLGenerator — Phlip <phlip2005@...> 2008/01/14

Eric Hodel wrote:

[#15073] Re: how to "borrow" the RDoc::RubyParser and HTMLGenerator — Eric Hodel <drbrain@...7.net> 2008/01/14

On Jan 13, 2008, at 20:35 PM, Phlip wrote:

[#15185] Friendlier methods to compare two Time objects — "Jim Cropcho" <jim.cropcho@...>

Hello,

10 messages 2008/01/22

[#15194] Can large scale projects be successful implemented around a dynamic programming language? — Jordi <mumismo@...>

A good article I have found (may have been linked by slashdot, don't know)

8 messages 2008/01/24

[#15248] Symbol#empty? ? — "David A. Black" <dblack@...>

Hi --

24 messages 2008/01/28
[#15250] Re: Symbol#empty? ? — Yukihiro Matsumoto <matz@...> 2008/01/28

Hi,

Finding I need explicit "GC.start" in my programs to prevent extreme growth.

From: Ron Mayer <rm_rails@...>
Date: 2008-01-07 22:51:43 UTC
List: ruby-core #14829
Short summary:
  * Some ruby scripts stay small (20MB) with GC.start
    but grow very large (400MB) without.
  * I would have expected ruby to do such garbage
    collection automatically.
  * 3 short test scripts shown that reproduce the
    problem are below.

I find I have to force garbage collection using GC.start to keep
some of my scripts from growing from 20MB (when I use GC.start)
to 400+MB when I don't.  I'm quite sure I'm not hanging on to
any references to large objects --- if only because explicit
GC.start's stop the program from growing.

The first two programs below are the shortest test case
I can make that show the problem.  Test program 1
only differs from test program 2 in that the second
one has GC.start in the loop.   The first one grows
to over 400MB.  The second one stays under 25MB.

Is there a way I can tell Ruby to automatically run the
garbage collector more frequently?

Also strange - it seems that stuff done outside the loop
has a side effect that triggers the behavior.   In the third
test script below I changed it to not call "flatten" outside
the loop -- which seems to change the behavior of garbage
collection in the loop.

#########################################################################
#########################################################################

#########################################################################
#  Example Program 1: This unexpectedly grows to almost 1/2 GB.
#########################################################################
a = (1..200000).map{|x| [x.to_s]};a.length
b = a.flatten.map{|x| x.to_i} ; b.length
puts `grep VmSize /proc/#{$$}/status`           ######## about 20MB
(1..200).each{|x| b.pack("I*").unpack("I*");}
puts `grep VmSize /proc/#{$$}/status`           ######## WHOA  400MB+


#########################################################################
#  Example Program 1: Explicit GC in the loop makes it stay at 20MB
#########################################################################
a = (1..200000).map{|x| [x.to_s]};a.length
b = a.flatten.map{|x| x.to_i} ; b.length
puts `grep VmSize /proc/#{$$}/status`           ######## about 20MB
(1..200).each{|x| b.pack("I*").unpack("I*"); GC.start}
puts `grep VmSize /proc/#{$$}/status`           ######## Stays under 20MB


#########################################################################
#  Example Program 1: Avoiding flatten outside the loop keeps it < 20MB
#########################################################################
a = (1..200000).map{|x| [x.to_s]};a.length
b = a.map{|x| x[0].to_i} ; b.length
puts `grep VmSize /proc/#{$$}/status`         ######## under 20 MB
(1..200).each{|x| b.pack("I*").unpack("I*");}
puts `grep VmSize /proc/#{$$}/status`         ######## still 20 MB

#########################################################################
#########################################################################

Any thoughts what I should do?
  * keep calling gc from my loop?
  * buy more memory?
  * file a bug report somewhere?

   Ron

PS: This was discussed a bit on comp.lang.ruby earlier, and
Eric Mahurin who suggested there may be a bug around
rb_ary_splice and/or rb_str_buf_cat and provided more
test cases.  That thread can be found here http://tinyurl.com/358zyw


In This Thread

Prev Next