[#4766] Wiki — "Glen Stampoultzis" <trinexus@...>

21 messages 2000/09/04
[#4768] RE: Wiki — "NAKAMURA, Hiroshi" <nahi@...> 2000/09/04

Hi, Glen,

[#4783] Re: Wiki — Masatoshi SEKI <m_seki@...> 2000/09/04

[#4785] Re: Wiki — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/09/05

Howdy,

[#4883] Re-binding a block — Dave Thomas <Dave@...>

16 messages 2000/09/12

[#4930] Perl 6 rumblings -- RFC 225 (v1) Data: Superpositions — Conrad Schneiker <schneik@...>

Hi,

11 messages 2000/09/15

[#4936] Ruby Book Eng. translation editor's questions — Jon Babcock <jon@...>

20 messages 2000/09/16

[#5045] Proposal: Add constants to Math — Robert Feldt <feldt@...>

15 messages 2000/09/21

[#5077] Crazy idea? infix method calls — hal9000@...

This is a generalization of the "in" operator idea which I

17 messages 2000/09/22

[#5157] Compile Problem with 1.6.1 — Scott Billings <aerogems@...>

When I try to compile Ruby 1.6.1, I get the following error:

15 messages 2000/09/27

[ruby-talk:5058] Re: GC patch

From: Mathieu Bouchard <matju@...>
Date: 2000-09-22 07:06:20 UTC
List: ruby-talk #5058
I wrote a patch to Ruby 1.6.0pre2's gc.c that makes gc frequency inversely
proportional to the number of currently allocated objects, so that % of
time spent on GC remains about the same. With Aleksi's program (see
message #4407) I get the following results. My version of the GC uses
about 20% more RAM, but one can fumble with the linear equations for more
conservative RAM usage if wanted.

Aleksi's program with original ruby 1.6.0pre2 garbage collector:

      0: 02:28:30.884
   1000: 02:28:31.977 1.0938
   2000: 02:28:33.926 1.9487
   3000: 02:28:36.772 2.8460
   4000: 02:28:40.610 3.8377
   5000: 02:28:45.309 4.6988
[...]
  20000: 02:31:46.021 18.6758
  21000: 02:32:04.996 18.9755
  22000: 02:32:24.899 19.9027
  23000: 02:32:45.754 20.8553
  24000: 02:33:08.305 22.5503

With my patch:

      0: 02:24:37.112
   1000: 02:24:38.061 0.9497
   2000: 02:24:39.134 1.0725
   3000: 02:24:40.323 1.1893
   4000: 02:24:41.468 1.1449
   5000: 02:24:42.816 1.3479
[...]
  20000: 02:25:03.431 1.1860
  21000: 02:25:04.710 1.2786
  22000: 02:25:05.992 1.2823
  23000: 02:25:08.051 2.0590
  24000: 02:25:09.388 1.3363



Here is the patch (it's not beautiful, but it works):

51,69d50
< long allocated_cells = 0;
< 
< int
< gc_enough_mallocs_p()
< {
< 	return malloc_memories > 1000000 + (allocated_cells<<7);
< }
< 
< int
< gc_free_min()
< {
< 	return 4096 + (allocated_cells>>3);
< }
< 
< int
< gc_heaps_increment()
< {
< 	return 8 + (allocated_cells>>16);
< }
92c73
<     if (gc_enough_mallocs_p()) {
---
>     if (malloc_memories > GC_MALLOC_LIMIT) {
273c254
< 	heaps_length += gc_heaps_increment();
---
> 	heaps_length += HEAPS_INCREMENT;
305d285
<     allocated_cells++;
714c694
<     while (freed < gc_free_min()) {
---
>     if (freed < FREE_MIN) {
716d695
< 	freed += HEAP_SLOTS;
858d836
<     allocated_cells--;
923c901
< 	if (!freelist || gc_enough_mallocs_p()) {
---
> 	if (!freelist || malloc_memories > GC_MALLOC_LIMIT) {
1260,1265d1237
< static VALUE
< gc_allocated_cells()
< {
< 	return INT2NUM(allocated_cells);
< }
< 
1272d1243
<     rb_define_singleton_method(rb_mGC, "allocated_cells", gc_allocated_cells, 0);




matju




In This Thread