Deep Breath

DIY, 科学, IT, 環境, LIFE

ガーベジコレクションとRust・その1 ~ GCとゴミ問題

time 2022/04/03

 ソフトウェアの世界でガーベジコレクションとは、プログラムが動くとき、いらなくなったメモリーを回収して、後続の処理で使えるようにするしくみのことを言う。言語処理系が持っている機能なので、ソフトウェアを仕事にしている人以外で、このような処理がWebサイトやシステムの裏側で動いていることを知っている人に出会ったことはない。

 今や、多くのシステムでガーベジコレクション(以下GCと略す)が動いているが、全てのシステムで動いているわけではない。Pythonやjavascript、Rubyなどのスクリプト言語で作られたシステムの多くではGCが動いているが、一方、コンパイル型言語であるC言語のような言語では、プログラマが自分でメモリーを確保し、使い終わったら解放するというコードを書かなければならない代わりに、GCは不要である。しかし、人間がプログラムを書く場合、メモリーの割り当て・解放は、見つけにくいバグの原因となっていて、メモリーバグにはまると、不注意にメモリーを破壊している場所を見つけ出すのに、多くの時間を費やす羽目になる。

 GCにはいろんな方式があるが、処理としてはそれなりに時間がかかる、いわゆる高価な処理である。プログラムはどんな時にも高速に動いてい欲しいと思っている人にとっては、GC邪魔者である。プログラマーにとっては、メモリーのことを気にせずにコードを書けることには、多大な恩恵があるのだが、それと引き換えに、処理系の都合で、意図しないタイミングでGCが動いて効率低下を余儀なくされることがある。ハードウェアの性能がどんどん上がっているために、この効率低下の影響は薄められ、それもあって今はスクリプト言語が流行している。その昔、Java(*)のヒープメモリのOldとNewの割り当てに苦労したうえ、突然フルGCが走って冷や汗をかいた経験のある人にとっては、今はかなりましな時代になったと思う。(この話題は次回に続く)

 GCはコンピュータ言語の機能としては、目立たないが重要な機能の1つ。人間の脳も情報処理器官なので、処理過程で不要なメモリーが発生するような気がするが、それはどうやって回収しているのだろうか?何らかのGCのような機構があるのではないか。もしかしら、夢とは、脳にとってある種GCのような働きをしているのではないか、と思うと、何となくちょっと、そうかもしれないと思う。もっとも、脳とノイマン型コンピューターではそもそもハードウェアのアーキテクチャが違うので、同じようなソフトウェアで類推すること自体に無理があるとは思うが。AIが注目されているが、AIは忘れることができるのか?という問題もホットだと言う。この辺にもメモリーのゴミに関連した話題がころがっているような気もする。

 ゴミ問題と言う意味では、リアルなゴミは、今や地球規模の大問題。現実世界にもGCのようなシステムがあって、それに任せておけばゴミがきれいになくなってゆくようなシステムがあればよいのに、と思う。実際には、行政や企業によるゴミの分別・回収・リサイクル・焼却のような取り組みがGCそのものの活動である。ソフトウェアのGCも一筋縄ではいかない処理だが、現実世界のゴミ問題はさらに複雑。コンピュータの世界でのゴミ処理の考え方を現実世界にも応用できないか、みたいなことも考えたが、リアルな世界の複雑さはちょっとレベルが違うと実感した。

(*)Javaは、コンパイル型と言われるが、コンパイルされるのはJavaVMで動く中間言語で、VMではGCが動く。

2022.4.3(日)
画像:ゴミ拾いをする人(フリーイラストから)

down

コメントする




Toshi's Profile

会社員(製造業・雇用延長)。元SE、元大学非常勤講師、元ロルファー。DIYと散歩とメモが趣味。Moleskineを持ち歩いている。愛知県岡崎市在住。
toshi@ueba.sakura.ne.jp
DIY作品集はこちら