Ubuntu 18.04にJava11をインストール

sudo add-apt-repository ppa:linuxuprising/java
sudo apt-get install oracle-java11-installer

言語間の速度比較

お知らせ

この記事の最新版 (2023/5版) が下記にあります。こちらもご参照ください。

記事

シングルスレッドでほぼCPUだけを使う単純なアルゴリズムで1億までの素数を求めるプログラムを作成。その実行時間と最大使用メモリ量を測定した。 ソースコードはここに保存。
言語 時間 (sec) 最大使用物理メモリ(MiB) 算出素数格納コンテナ 補足情報 感想
C 12.6 24.1 固定長配列 gcc 8.3.0
最適化-O3
-
C++ 64.8 36.0 std::vector gcc 7.3.0
最適化なし(-O0でビルド)
-
C++ 12.7 36.0 std::vector gcc 7.3.0
最適化(-O3でビルド)
最適化するとやはりかなり速くなる。メモリ使用量も圧倒的にすくない
JAVA 17.2 215.5 ArrayList OpenJDK 10.0.2 C/C++の約1.5倍の実行時間。これまでの経験ともだいたい整合する
Kotlin 17.2 236.5 List Kotlin 1.3.61 Javaと同等。コードの書きやすさを考えると悪くない選択肢
Scala 20.1 2023.0 mutable.ArrayBuffer Scala 2.11.12 速度面ではJavaと比較して少し劣る程度だが、メモリ使用量がJavaの約10倍、C++の100倍近い。
Golang 49.2 136.2 slice go1.11.6 予想より速くない。メモリ使用量もJavaの半分程度で、この結果だけだと使いみちが中途半端となるかも。
Node.js 23.2 184.8 Array v8.10.0 JavaやScalaに匹敵。予想より速い。メモリ使用量もそれほど多くない。
PHP 151.2 196.7 array PHP 7.2.10 特に良いところもないような。無理に使うような言語ではないと思う。
Python 451.8 3235.2 list 2.7 圧倒的に遅い。メモリ使用量も半端ない。でも、憎めないやつ。ほんとはこういう用途ではNumPyとか使うべきなのかな。後日numbaでも試してみたい。
Python3 592.8 238.3 list 3.6.7 メモリ使用量はPython2に比べて大幅にすくないものの、実行速度がさらに遅くなった

評価環境

  • Intel Core i7 8559U (2.7GHz)
  • DDR4 2400MHz 32GiB
  • Ubuntu 18.04 LTS