【速度検証】第1回小町算スピードレース

f:id:hira98:20190602175639p:plain

【結論】

  • JavaからJavaScriptのメソッドを呼ぶと、めちゃくちゃ時間がかかる。

  • 例として、JavaからJavaScriptのeval()呼ぶと20分かかる処理を、Javaだけで実装すると1秒で終わる。

  • 因みに、Pythonで実行すると7秒かかった。

【目次】

はじめに

ブログのネタ切れを起こさないように、前々回投稿した小町算ネタを引っ張っています。

前々回、JavaからJavaScriptのeval()を呼んで実装しました

hira98.hatenablog.com

前回、Javaでeval()を自作しました。

hira98.hatenablog.com

今回は、どれだけ速度が改善されたか検証してみました。

出場者の紹介

今回の出場するプログラムは次の3つです。

レーン 二つ名 Gistのファイル名
1 JavaScriptの紐になったJava Komatizan.java(※)
2 JavaScriptから独り立ちしたJava Komatizan.java(※)
3 実はJavaより歴史が古いPython Komatizan.py

※実行時の引数によって、二つ名が替わります。

# JavaScriptの紐になったJava
$ Java Komatizan 1

# JavaScriptから独り立ちしたJava  
$ Java Komatizan 0

実際のコードはGistに載せているの、気になる方は参照ください。 (全部載せると長くなってしまうので、リンクだけ貼り付けています。)

https://gist.github.com/b4e68f2bb929c58b4fa42a731a90059c

大会ルール

速度検証用のPC環境と速度測定方法の説明です。

  • PC環境は以下になります。

f:id:hira98:20190602180056p:plain

  • 速度の測定方法

    timeコマンドを使用して1回だけ測定し、user項目の値を計測結果とします。

レースの結果

レーン 走者 タイム 順位
1 JavaScriptの紐になったJava 20分36.058秒 2
2 JavaScriptから独り立ちしたJava 1.261秒 1
3 実はJavaより歴史が古いPython 7.938秒 2

さいごに

JavaからJavaScriptを呼ぶとこんなに時間がかかるのは衝撃でした。。

ただし、現状の実装だと毎回ScriptEngineクラスのインスタンスを生成しており、そこで時間を費やしている可能性もあります。改善の余地はあると思われるのでネタとしてストックしておきます🤪