オルタナティブ・ブログ > 森崎修司の「どうやってはかるの?」 >

計測できそうでできない多くのこと。エンピリカル(実証的)アプローチで。

最近のJavaのStringの実装変更で印象に残ったこと2点

»

去年の記事でOracleがJavaのStringの実装(内部的な実装)を変更したことを伝えているものをよみました。変更の理由は、以前の実装がメモリリークの原因となり得るもので、新しい実装はそれを防いでいるそうです。変更により実行時間が増えるそうです。

R42日記のこちらの記事をはじめとして、和訳や日本語で説明されているものもあります。

redditのフォーラムでStringの実装を担当する開発と思われる人からの投稿に300件を超えるコメントが寄せられており、インパクトが大きい変更で様々な議論が起こっていることが伺えます。

変更の詳細は上述Webを読んでいただくことにして、私にとって印象的だったことを2点。一つはリリース後それなりに経って、安定しているかと思われるStringの実装であっても変更せざるを得ない部分があったことです。フォーラムをみるとメモリリークで困るケースが多かったことと発見から修正まで数年かかっていることがうかがえます。インパクトが大きく修正の判断が難しい問題であったのではないでしょうか。300件以上ついているコメントでは、変更後の実装で性能が下がるアプリケーションが存在することも伺えます。

もう一つ印象に残ったことは、記事の中に計算量が記されていることでした。以前の実装がO(1)、変更後はO(n)と記載されています。大学の情報科学、情報工学、計算機科学といった学部等では、計算量(オーダ)を習うと思うのですが、開発者向けの記事であってもあまりみないように思います。こういった定量的な表現が増えていくことは議論の深さとスピードを増すことが多いので望ましいことだと思います。

なお「あまりみない」というのは私の主観的な感触であり、しかも今回の問題は計算量へのインパクトが大きい話なので計算量が出てきても不思議はないのですが。ニュースをはじめ記事にはなるべく目を通すようにしていますがオーダとか計算量が示されている記事をほとんど見たことがありません。

Comment(0)