[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 10109] Re: Java 言語で学 ぶデザインパターン入門第 6 回議事録



こんばんは。続いて武川です。

From: "TAKAHASHI, Tomohiro" <t_takahashi@xxxxxxxxxxxxxx>
Subject: [jfriends-ml 10097] Re: Java 言語で学ぶデザインパターン入門第 6 回議事録
Date: Mon, 06 May 2002 00:21:53 +0900

>   以下に書いた java.lang.StringBuffer と 自作の CustomStringBuffer では、
> append(String) するのは CustomStringBuffer のほうが速いのですが、
> Stringを取得する際に CustomStringBuffer がとても遅くなるようです。
> 
>   String を返す toString()メソッドの実装と、java.lang.Stringクラスのコンス
> トラクタに秘密があるようです。
>   CustomStringBuffer が使用している
>     public String(char value[], int offset, int count)
> というコンストラクタは、引数チェックとchar配列のコピーがある分だけ遅いよう
> です。(^^;
> 

ソースを見て確かめてみました。
StringBufferからStringへの変換は、配列のcopyをしないで参照のコピー
と共有フラグの更新だけでやっているのですね。
で、StringBufferに破壊的な操作がきた場合は、バッファをコピーすると。。。
まさにcopy on writeってやつですね。

パッケージスコープな処理なので、外部で真似はできないですね。残念。

p.s.先程あやまってML宛と村山さん宛にメールを送ってしまったようです。
ごめんなさい。村山さん。捨ててください。