SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Java ​はどれだけ速いのか
@YujiSoftware
Java のイメージは?
遅い or 速い
なぜ Java = 遅いイメージがあるのか?
•Duke のせい?
– 短足
– 太ってる
→ 「なんか動きが遅そう…」
• GCは遅いという概念
• Java 1.1 の頃の印象が残っている
なぜ Java = 速いイメージがあるのか?
•Duke のおかげ?
– Tumbling Duke
→ 「Java はすごい!」
• JIT コンパイラが強力
– C言語よりも速くなるときがあるとも言われている
• GC​が速くなった
結局のところどうなの?
• やってみるしかない!
• 数独(ナンプレ)解析プログラムを作成
– 主な処理は2つ
• 問題の読み込み(100万件)
• 数独の解析(主にループと条件分岐)
• Java 版と C 言語版で実行時間を比較
– Java はどれだけ速いのか…!
実行結果
• C言語の方が速い!
4.49秒
3.32秒
どうしてこうなった
• 最初は C言語の方が遅かった
– C言語で、200万回 malloc したら遅かった
– 2回にしたら、一気に速くなった
– Javaは、200万回 new してても十分に速かった
– 2回にしても、ほとんど実行時間は変わらなかった
• 結果、Java が負けた orz
• C言語にも弱点はある
– しかし、今回のプログラムでは Java が有利にならなかった
まとめ
• Java は C 言語よりも遅い
まとめ
• Java は C 言語よりも遅い
ちょっと
待った!
今日のテーマ
「Java はどれだけ速いのか」
• Java は遅いで終わらせるわけにはいかない
– 相手が悪かった
• C言語以外と比較してみた
– 改めて、Java はどれだけ速いのか…!
実行結果
• やっぱり は速い!
4.49秒
7分21秒
9分43秒
動的型付け言語との比較は
ずるいのでは?
どういうこと
• Ruby や Python は動的型付け言語
– 実行時に型を判断するオーバーヘッドがある
– 最適化が難しい
• Java は静的型付け言語
– コンパイル時に型を確定させている
– 最適化がしやすい
• 比較するなら、同じ種類の言語同士でやるべき!
今日のテーマ
「Java はどれだけ速いのか」
• 真打登場
– C# (.NET Core)
– Go
– Rust
– C
• これらの言語と比較してみた
– 果たして、Java はどれだけ速いのか…!
実行結果
4.49秒
3.32秒
2.86秒
2.90秒
6.39秒
まとめ
• Java は C# よりも速い
– Rust とか Go とか、速すぎでは…
• ただし「今回の数独解析プログラムの場合」という条件付き
– プログラムの種類によって大きく順位が変わる可能性あり
– 実行環境によっても大きく変わる
• OS、CPUの種類、メモリの量、プログラマーの腕、などなど
• 特に、Linux上で動かしたので C# が少し不利だったかも…
• みなさんも、いろいろなプログラムで試してみましょう!
Java ​はどれだけ速いのか
@YujiSoftware
補足
• 実行環境
– Ubuntu 18 on VirtualBox
• Intel Core i7-7500U @ 2.70GHz
• CPU2コア、メモリ4GBを割り当て
• 実行バージョン
– GCC 7.5.0
– Java 14.0.2
– Go 1.15
– Rust 1.45.1
– .NET 3.1.401
– Ruby 2.5.1p57
– Python 3.6.9
• ソースコード
– https://github.com/YujiSoftware/Sudoku
– 検証求む!

Weitere ähnliche Inhalte

Ähnlich wie Javaはどれだけ速いのか

OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualOpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualYuji Kubota
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるToshiyuki Hirata
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Yuichi Yoshida
 
MySQL Casual Talks Vol.3 LT
MySQL Casual Talks Vol.3 LTMySQL Casual Talks Vol.3 LT
MySQL Casual Talks Vol.3 LTTomohiro Ikeda
 

Ähnlich wie Javaはどれだけ速いのか (8)

java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualOpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasual
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえる
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
 
MySQL Casual Talks Vol.3 LT
MySQL Casual Talks Vol.3 LTMySQL Casual Talks Vol.3 LT
MySQL Casual Talks Vol.3 LT
 
Zabbix study5lt
Zabbix study5ltZabbix study5lt
Zabbix study5lt
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
Play ja 3_update
Play ja 3_updatePlay ja 3_update
Play ja 3_update
 

Mehr von YujiSoftware

ラムダのコンパイル結果を5分で説明するよ​
ラムダのコンパイル結果を5分で説明するよ​ラムダのコンパイル結果を5分で説明するよ​
ラムダのコンパイル結果を5分で説明するよ​YujiSoftware
 
Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!YujiSoftware
 
技術書を読むと眠くなる!これを解決するために取った10の対策
技術書を読むと眠くなる!これを解決するために取った10の対策技術書を読むと眠くなる!これを解決するために取った10の対策
技術書を読むと眠くなる!これを解決するために取った10の対策YujiSoftware
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
Java を今すぐダウンロードしてみたお話
Java を今すぐダウンロードしてみたお話Java を今すぐダウンロードしてみたお話
Java を今すぐダウンロードしてみたお話YujiSoftware
 
JVM言語を使ってみようの歌
JVM言語を使ってみようの歌JVM言語を使ってみようの歌
JVM言語を使ってみようの歌YujiSoftware
 
AtCoderで始めるテスト駆動開発
AtCoderで始めるテスト駆動開発AtCoderで始めるテスト駆動開発
AtCoderで始めるテスト駆動開発YujiSoftware
 
Javaでマサカリ投げてみた
Javaでマサカリ投げてみたJavaでマサカリ投げてみた
Javaでマサカリ投げてみたYujiSoftware
 
ジャバのはなし、JAVAのはなし、Javaのはなし
ジャバのはなし、JAVAのはなし、Javaのはなしジャバのはなし、JAVAのはなし、Javaのはなし
ジャバのはなし、JAVAのはなし、JavaのはなしYujiSoftware
 

Mehr von YujiSoftware (9)

ラムダのコンパイル結果を5分で説明するよ​
ラムダのコンパイル結果を5分で説明するよ​ラムダのコンパイル結果を5分で説明するよ​
ラムダのコンパイル結果を5分で説明するよ​
 
Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!
 
技術書を読むと眠くなる!これを解決するために取った10の対策
技術書を読むと眠くなる!これを解決するために取った10の対策技術書を読むと眠くなる!これを解決するために取った10の対策
技術書を読むと眠くなる!これを解決するために取った10の対策
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
Java を今すぐダウンロードしてみたお話
Java を今すぐダウンロードしてみたお話Java を今すぐダウンロードしてみたお話
Java を今すぐダウンロードしてみたお話
 
JVM言語を使ってみようの歌
JVM言語を使ってみようの歌JVM言語を使ってみようの歌
JVM言語を使ってみようの歌
 
AtCoderで始めるテスト駆動開発
AtCoderで始めるテスト駆動開発AtCoderで始めるテスト駆動開発
AtCoderで始めるテスト駆動開発
 
Javaでマサカリ投げてみた
Javaでマサカリ投げてみたJavaでマサカリ投げてみた
Javaでマサカリ投げてみた
 
ジャバのはなし、JAVAのはなし、Javaのはなし
ジャバのはなし、JAVAのはなし、Javaのはなしジャバのはなし、JAVAのはなし、Javaのはなし
ジャバのはなし、JAVAのはなし、Javaのはなし
 

Javaはどれだけ速いのか