技術・科学

Java Classファイルを圧縮

投稿日:

今開発しているアプリケーションで、実に久しぶりに実行形式ファイルのサイズということを意識せざるを得なくなった。Javaでそんなことを意識するなんて考えもしなかった。
ケータイ用のアプリというのは装置が装置なだけに容量に厳しいのだった。で、僕が作ったiアプリはちょっと前の型とか700シリーズでは容量オーバーで動かないということがわかった。
JavaのプログラムはコンパイルするとVMによる逐次実行型の実行形式ファイルを出力する。これがclassファイルなのだが、この中身はソースコードでつけたクラスやメソッド、変数名のようなものがわりとそのまま残っているらしい。人にフレンドリなコードや実行環境を追求した結果そういうことになっているのだ。
そういうわけでJavaではあまり実行環境の制限を意識しない。実行に必要なリソースは十分あるというスタンスでのプログラミングが一般的なのだ。
しかし、ケータイアプリは違う。物理的なリソースが小さいから、ソースコードレベルである程度コンパクト化を意識したコーディングが要求されるのだ。
しかし、物理的な制限を意識したコードというのは人間にとっては読みにくいコードにならざるを得ない。
そこでclassの圧縮ツールの出番だ。
たぶん可読性の高いコードの中にある冗長なシンボル等を短くしたり、メソッドのインライン化のようなことを駆使して最低限VMが識別可能なものに置き換えることでclassファイルのサイズを小さくするというのがこのような圧縮ツールの役割だ。
僕が作ったプログラムは圧縮ツールによって60%程度のサイズに小さくなった。
そういえば最近はあまり意識しなくなったけれど、昔は実行形式(マシン語)になったプログラムを逆アセンブルして最適化してアセンブルするということをやっていたものだ。大抵は性能を引き出すために行うもので、CPUのレジスタの特性の違いなんかを意識してマシンコードを書き換えたりしていた。ソフトウエア技術者もハードウエアの知識が必須だったわけだ。
最近は実行環境がリッチになったし、コンパイラが自動的に最適化をしたりするということもあって、ハードを効果的に動かすということをソフトウエア技術者がことさら意識する必要は無くなってきた。
それはそれで悪いことではないけれど、そういうリッチな環境しか知らない世代が仕事でプログラムを組むようになって、システムを効率的に動かす知恵がどんどん失われてきているような気がしないでもない。趣味のプログラミングと商用のプログラミングはあいかわらず違うのだ。
iアプリのプログラミングはそんなことを考えさせられる面白い題材なのだった。







書いた人

nyao

nyao

本を書きたい人にITの基礎から学んでもらって、Kindleで著者デビューするまでをサポートします。 ITってよくわからないという人のために勉強会をやっています。 「読書と編集」という屋号でお仕事をしています。

プロフィールを表示 →

-技術・科学

Copyright© NyaoPress 読書と日常 , 2019 All Rights Reserved.