平成23年度 特別 午前 問23
ソフトウェア開発管理技術
バイトコードに関する問題
Java などのバイトコードプログラムをインタプリタで実行する方法と,コンパイルしてから実行する方法を,次の条件で比較するとき,およそ何行以上のバイトコードであれば,コンパイル方式の方がインタプリタ方式よりも処理時間(コンパイル時間も含む)が短くなるか。
〔条件〕 (1) 実行時間はプログラムの行数に比例する。 (2) 同じ100行のバイトコードのプログラムをインタプリタで実行すると 0.2 秒掛かり,コンパイルしてから実行すると 0.003 秒掛かる。 (3) コンパイル時間は100行当たり 0.1 秒掛かる。 (4) コンパイル方式の場合は,プログラムの行数に関係なくファイル入出力,コンパイラ起動などのために常に 0.15 秒のオーバヘッドが掛かる。 (5) プログラムファイルのダウンロード時間など,そのほかの時間は無視して考える。
- ア50
- イ75
- ウ125
- エ155
答えと解説を見る
✓ これが正解エ155
解説
1行ごとに縮む時間で、固定の時間を割ります。
バイトコードの行数を n として、二つの方式の時間を式に直します。インタプリタ方式は100行で0.2秒ですから1行あたり0.002秒、全体で0.002×n 秒です。コンパイル方式は、まず行数に関係なく0.15秒かかり、そこへコンパイルの0.001×n 秒と、出来上がったものを走らせる0.00003×n 秒が積み上がります。1行増えるごとに縮む時間は、0.002から0.001と0.00003を引いた0.00097秒です。0.15秒を取り返すのに必要な行数は0.15÷0.00097で約154.6行ですから、154行では0.308秒と0.30862秒でまだ前者が短く、155行で0.310秒と0.30965秒となって順序が入れ替わります。判定の軸は、行数に比例して増える時間と、行数によらない時間を分けて置けているかです。
ほかの選択肢はなぜ違うのか
- ア50:起動などにかかる0.15秒を数えに入れず、100行で0.1秒というコンパイルの手間だけを取り返す行数として0.1÷0.002を計算すると、ちょうどこの値が出ます。実際にはこの行数で0.1秒と0.2015秒で、差はまだ開いたままです。
- イ75:行数によらない0.15秒だけを取り返す行数として、0.15÷0.002を計算した値です。100行につき0.1秒というコンパイルそのものの手間が抜け落ちており、この行数では0.15秒と0.22725秒で順序は変わりません。
- ウ125:0.15秒と0.1秒を足した0.25秒を、行数によらない一定の時間とみなして0.25÷0.002を計算すると得られます。コンパイルの手間は行数に比例して増えるので一定とは置けず、この行数でも0.25秒と0.27875秒です。
出典:平成23年度 特別 基本情報技術者試験 午前 問23(改変:原典の図表をテキストに書き起こした)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)