[#19011] open-uri - very easy net access library — Tanaka Akira <akr@...17n.org>

HTTP, FTP に簡単にアクセスするための open-uri というライブラリを作って

19 messages 2002/12/06

[#19066] ruby 1.6.9 preview4 予告 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

41 messages 2002/12/13
[#19079] Re: ruby 1.6.9 preview4 予告 — "Akinori MUSHA" <knu@...> 2002/12/16

At Fri, 13 Dec 2002 15:28:47 +0900,

[#19086] Re: ruby 1.6.9 preview4 予告 — UENO Katsuhiro <unnie@...> 2002/12/17

うえのです。

[#19087] Re: ruby 1.6.9 preview4 予告 — matz@... (Yukihiro Matsumoto) 2002/12/17

まつもと ゆきひろです

[#19083] Re: [ruby-cvs] ruby: * file.c (utimbuf): need to define for VC++. — WATANABE Hirofumi <eban@...>

わたなべです。

11 messages 2002/12/16

[#19127] Re: 1.6.8-preview4 build failed (on Vine Linux 2.1.5) (PR#373) — nobu.nakada@...

なかだです。

16 messages 2002/12/19
[#19129] Re: 1.6.8-preview4 build failed (on Vine Linux 2.1.5) (PR#373) — WATANABE Hirofumi <eban@...> 2002/12/19

わたなべです。

[#19198] ruby-1.8.0 / yield(nil)とyield()のちがい — m_seki@...

38 messages 2002/12/25
[#19209] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — matz@... (Yukihiro Matsumoto) 2002/12/27

まつもと ゆきひろです

[#19218] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — m_seki@... 2002/12/27

[#19219] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — matz@... (Yukihiro Matsumoto) 2002/12/27

まつもと ゆきひろです

[#19264] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — matz@... (Yukihiro Matsumoto) 2003/01/01

まつもと ゆきひろです

[#19266] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — Tanaka Akira <akr@...17n.org> 2003/01/01

In article <1041383157.631472.21307.nullmailer@picachu.netlab.jp>,

[#19271] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — matz@... (Yukihiro Matsumoto) 2003/01/01

まつもと ゆきひろです

[#19272] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — Tanaka Akira <akr@...17n.org> 2003/01/01

In article <1041394108.920587.21729.nullmailer@picachu.netlab.jp>,

[#19276] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — matz@... (Yukihiro Matsumoto) 2003/01/01

まつもと ゆきひろです

[#19278] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — Tanaka Akira <akr@...17n.org> 2003/01/01

In article <1041420724.492653.22355.nullmailer@picachu.netlab.jp>,

[ruby-dev:19236] Re: [1.8] speed

From: nobu.nakada@...
Date: 2002-12-29 13:24:11 UTC
List: ruby-dev #19236
なかだです。

At Sun, 29 Dec 2002 20:32:46 +0900,
Yukihiro Matsumoto wrote:
> |> これって具体的にはなにが起きてますか?
> |
> |ruby_xmalloc()でバッファを割り当てるときには、Object用であろう
> |とそれ以外だろうとmalloc_increaseにサイズが加算されていきます。
> |一方で、malloc_limitはGCが理解できるObjectの使用している分しか
> |計算されません。その結果、常にmalloc_increaseがmalloc_limitを上
> |回ることになってGCが動いてるんだろうという推測です。
> |
> |これはどうすればいいのやら…。この方式はrealloc()でも不正確にな
> |るし、止めたほうがいいのかも。
> 
> なるほどお。同意します、なくしましょう。
> 
> あれ、そういえば、わたし「この方式」を1.7でなくした覚えがあ
> るんですが、なんで復活してるんだろう。

[ruby-dev:18482]です。ruby-talkでメモリが余ってるのに使ってない
という話が出て、上限を上げるようにしたら今度はどんどん使いすぎ
てしまうしってことです。

単純にオブジェクトの個数に比例させるようにしたほうが、
[ruby-dev:18482]は現状の倍弱、[ruby-talk:59662]は1.6の数%増し
くらいで、それなりにバランスがとれてるように見えます。


Index: gc.c
===================================================================
RCS file: /cvs/ruby/src/ruby/gc.c,v
retrieving revision 1.113
diff -u -2 -p -r1.113 gc.c
--- gc.c	4 Dec 2002 07:39:32 -0000	1.113
+++ gc.c	29 Dec 2002 13:11:04 -0000
@@ -880,5 +880,5 @@ gc_sweep()
     int freed = 0;
     int i, j;
-    unsigned long live = 0;
+    unsigned long live = 0, garbage = 0;
 
     if (ruby_in_compile && ruby_parser_stack_on_heap()) {
@@ -902,5 +902,5 @@ gc_sweep()
     deferred_final_list = 0;
     for (i = 0; i < heaps_used; i++) {
-	int n = 0;
+	int n = 0, m = 0;
 	RVALUE *free = freelist;
 	RVALUE *final = final_list;
@@ -930,30 +930,5 @@ gc_sweep()
 	    else {
 		RBASIC(p)->flags &= ~FL_MARK;
-		live += sizeof(VALUE);
-		switch (BUILTIN_TYPE(p)) {
-		  case T_OBJECT:
-		    live += size_of_table(ROBJECT(p)->iv_tbl);
-		    break;
-		  case T_CLASS:
-		  case T_ICLASS:
-		    live += size_of_table(RCLASS(p)->iv_tbl);
-		    live += size_of_table(RCLASS(p)->m_tbl);
-		    break;
-		  case T_STRING:
-		    live += RSTRING(p)->len+1;
-		    break;
-		  case T_ARRAY:
-		    live += RARRAY(p)->len * sizeof(VALUE);
-		    break;
-		  case T_HASH:
-		    live += size_of_table(RHASH(p)->tbl);
-		    break;
-		  case T_BIGNUM:
-		    live += RBIGNUM(p)->len * sizeof(BDIGIT);
-		    break;
-		  case T_STRUCT:
-		    live += RSTRUCT(p)->len * sizeof(VALUE);
-		    break;
-		}
+		live++;
 	    }
 	    p++;
@@ -972,5 +947,7 @@ gc_sweep()
 	}
     }
-    malloc_limit = live;
+    malloc_limit += malloc_increase;
+    malloc_limit *= (double)live / (live + freed);
+    if (malloc_limit < GC_MALLOC_LIMIT) malloc_limit = GC_MALLOC_LIMIT;
     malloc_increase = 0;
     if (freed < FREE_MIN) {


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread