SlideShare a Scribd company logo
1 of 14
Java をクラッシュさせて
遊んでみよう!
@YujiSoftware
Java をクラッシュさせる
• Java はめったにクラッシュしない?
• ところが、そうでもない!
– 特に、新しい機能はバグがあったりする
– 詳細は、バグデータベースに公開されている
• 今日は、OpenJDK のバグデータベースから見
つけたバグを再現して遊んでみました!
コンパイラのバグ
• JDK-8220018
• Switch式と
try…catch…finaly の組
み合わせで、コンパイ
ラがクラッシュする
• 実際に Java13 で試し
てみると…
public class SwTest {
public static void main(String[] args) {
System.out.println(switch (0) {
default -> {
try {
yield 1;
} catch (Exception ex) {
yield 2;
} finally {
yield 3;
}
}
});
}
}
再現しない (´・ω・` )
•クラッシュしなかった
– ちゃんとクラスファイルが生成された
C:JDK-8220018>C:Program FilesJavajdk-13binjavac" -source 13 --enable-preview
SwTest.java
注意:SwTest.javaはプレビュー言語機能を使用します。
注意:詳細は、-Xlint:previewオプションを指定して再コンパイルしてください。
C:JDK-8220018>dir
2019/11/23 01:33 605 SwTest.class
2019/11/23 01:33 400 SwTest.java
2 個のファイル 1,005 バイト
2 個のディレクトリ 24,369,549,312 バイトの空き領域
なぜ?
• 最新(Java 13)で、すでに修正されていた
– Java 12 で見つかったバグだった
– クラッシュバグは、すぐに直される
• 教訓
– バグレポートの修正バージョンや影響バージョン
をよく確認しよう
• 改めて、Java 12 でやってみると…
クラッシュした
• スタックトレースを吐いて落ちる
– 自らバグを認める
C:JDK-8220018>“C:Program FilesJavajdk-12binjavac” -source 12 --enable-preview SwTest.java
注意:SwTest.javaはプレビュー言語機能を使用します。
注意:詳細は、-Xlint:previewオプションを指定して再コンパイルしてください。
コンパイラで例外が発生しました(12)。Bug Database (http://bugs.java.com)で
重複がないかをご確認のうえ、Java bugレポート・ページ
(http://bugreport.java.com)でJavaコンパイラに対するbugの登録をお願いいた
します。レポートには、そのプログラムと下記の診断内容を含めてくだ さい。ご
協力ありがとうございます。
java.lang.AssertionError
at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:155)
at jdk.compiler/com.sun.tools.javac.util.Assert.check(Assert.java:46)
at jdk.compiler/com.sun.tools.javac.jvm.Gen.visitBreak(Gen.java:1707)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBreak.accept(JCTree.java:1561)
at jdk.compiler/com.sun.tools.javac.jvm.Gen.genDef(Gen.java:595)
at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:630)
at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:616)
Java VM のバグ
• JDK-8226798
– JVM crash in
klassItable::initialize_itable_for_interface(int,
InstanceKlass*, bool, Thread*)
– 影響バージョン:8, 11, 12.0.1, 13, 14
– 修正バージョン:14
• パッケージプライベートのメソッドと、
インタフェースのデフォルトメソッドの両方で
同じメソッドが定義されているなどの条件で、
実行時に Java VM がクラッシュするバグ
再現コード
• なぜかデフォルトメソッドが2つあると再現する
らしい
public class VTableTest {
interface Intf {
public default void m() { }
public default void unusedButNeededToReproduceIssue() { }
}
static class B extends pkg.A implements Intf {
}
static class C extends B {
public void m() { System.out.println("In C.m()"); }
}
public static void main(String[] args) {
new C().m();
}
}
package pkg;
public class A {
void m() { }
}
!?
実行結果
• EXCEPTION_ACCESS_VIOLATIONでクラッシュ
C:JDK-8226798>"C:Program FilesJavajdk-13binjava" VTableTest
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff8eaa6da4e, pid=11948, tid=13800
#
# JRE version: OpenJDK Runtime Environment (13.0+33) (build 13+33)
# Java VM: OpenJDK 64-Bit Server VM (13+33, mixed mode, sharing, tiered, compressed oops, g1 gc,
windows-amd64)
# Problematic frame:
# V [jvm.dll+0x50da4e]
#
# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:JDK-8226798hs_err_pid11948.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
正しい挙動は?
• バックポートされてる
– クラッシュバグは修正してくれることが多い
• なので、Java 11.0.5 では正しく動く
– このバージョンで実行すると…!
実行結果
•直ってなかった
– 同じ理由でクラッシュする
C:JDK-8226798>"C:Program FilesJavajdk-11.0.5binjava" VTableTest
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff8eaab927e, pid=14008, tid=10528
#
# JRE version: Java(TM) SE Runtime Environment (11.0.5+10) (build 11.0.5+10-LTS)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (11.0.5+10-LTS, mixed mode, tiered, compressed oops,
g1 gc, windows-amd64)
# Problematic frame:
# V [jvm.dll+0x51927e]
#
# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:JDK-8226798hs_err_pid14008.log
なぜ直っていないのか
• わからん (´・ω・`)
まとめ
• Java はバージョンによってバグがある
– 詳細はバグデータベースに公開されている
• 実際に再現させてみると面白い
– 思い通りにいかないことも多い
• みなさんも、ぜひ遊んでみてください!
Java をクラッシュさせて
遊んでみよう!
@YujiSoftware

More Related Content

What's hot

Go静的解析ハンズオン
Go静的解析ハンズオンGo静的解析ハンズオン
Go静的解析ハンズオンTakuya Ueda
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
Jupyter(Python)とBigQueryによるデータ分析基盤のDevOps #pyconjp
Jupyter(Python)とBigQueryによるデータ分析基盤のDevOps #pyconjp Jupyter(Python)とBigQueryによるデータ分析基盤のDevOps #pyconjp
Jupyter(Python)とBigQueryによるデータ分析基盤のDevOps #pyconjp @yuzutas0 Yokoyama
 
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方法林浩之
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkTakanori Suzuki
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテストTakuto Wada
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)NTT DATA Technology & Innovation
 
BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編sutepoi
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座Samir Hammoudi
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線MeetupMasatoshi Tada
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについてkumake
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...NTT DATA Technology & Innovation
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理NTT DATA Technology & Innovation
 
Fault, Error, Failure の違い
Fault, Error, Failure の違いFault, Error, Failure の違い
Fault, Error, Failure の違いMizuhiro Kaimai
 

What's hot (20)

Go静的解析ハンズオン
Go静的解析ハンズオンGo静的解析ハンズオン
Go静的解析ハンズオン
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
Jupyter(Python)とBigQueryによるデータ分析基盤のDevOps #pyconjp
Jupyter(Python)とBigQueryによるデータ分析基盤のDevOps #pyconjp Jupyter(Python)とBigQueryによるデータ分析基盤のDevOps #pyconjp
Jupyter(Python)とBigQueryによるデータ分析基盤のDevOps #pyconjp
 
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
 
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテスト
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
Fault, Error, Failure の違い
Fault, Error, Failure の違いFault, Error, Failure の違い
Fault, Error, Failure の違い
 

Similar to Java をクラッシュさせて遊んでみよう!

Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツールYasumasa Suenaga
 
HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)Yasumasa Suenaga
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]David Buck
 
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]David Buck
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードKazuhiro Hara
 
Inside frogc in Dart
Inside frogc in DartInside frogc in Dart
Inside frogc in DartGoro Fuji
 
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTHeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTYuji Kubota
 
Serviceability Toolsの裏側
Serviceability Toolsの裏側Serviceability Toolsの裏側
Serviceability Toolsの裏側Yasumasa Suenaga
 
JavaLearning_1.pptx
JavaLearning_1.pptxJavaLearning_1.pptx
JavaLearning_1.pptxRyuuGaku
 
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入Takayuki Konishi
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/AndroidセキュアコーディングMasaki Kubo
 
2012年javaメモリリーク
2012年javaメモリリーク2012年javaメモリリーク
2012年javaメモリリークtorutk
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageKoichi Sakata
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタl_b__
 

Similar to Java をクラッシュさせて遊んでみよう! (20)

Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
 
HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)
 
Cve 2013-0422
Cve 2013-0422Cve 2013-0422
Cve 2013-0422
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
 
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
Inside frogc in Dart
Inside frogc in DartInside frogc in Dart
Inside frogc in Dart
 
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTHeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LT
 
Serviceability Toolsの裏側
Serviceability Toolsの裏側Serviceability Toolsの裏側
Serviceability Toolsの裏側
 
JavaLearning_1.pptx
JavaLearning_1.pptxJavaLearning_1.pptx
JavaLearning_1.pptx
 
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 
Heap statsfx analyzer
Heap statsfx analyzerHeap statsfx analyzer
Heap statsfx analyzer
 
2012年javaメモリリーク
2012年javaメモリリーク2012年javaメモリリーク
2012年javaメモリリーク
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 
Ptt391
Ptt391Ptt391
Ptt391
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタ
 

More from 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
 

More from 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のはなし
 

Recently uploaded

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 

Recently uploaded (12)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 

Java をクラッシュさせて遊んでみよう!

  • 2. Java をクラッシュさせる • Java はめったにクラッシュしない? • ところが、そうでもない! – 特に、新しい機能はバグがあったりする – 詳細は、バグデータベースに公開されている • 今日は、OpenJDK のバグデータベースから見 つけたバグを再現して遊んでみました!
  • 3. コンパイラのバグ • JDK-8220018 • Switch式と try…catch…finaly の組 み合わせで、コンパイ ラがクラッシュする • 実際に Java13 で試し てみると… public class SwTest { public static void main(String[] args) { System.out.println(switch (0) { default -> { try { yield 1; } catch (Exception ex) { yield 2; } finally { yield 3; } } }); } }
  • 4. 再現しない (´・ω・` ) •クラッシュしなかった – ちゃんとクラスファイルが生成された C:JDK-8220018>C:Program FilesJavajdk-13binjavac" -source 13 --enable-preview SwTest.java 注意:SwTest.javaはプレビュー言語機能を使用します。 注意:詳細は、-Xlint:previewオプションを指定して再コンパイルしてください。 C:JDK-8220018>dir 2019/11/23 01:33 605 SwTest.class 2019/11/23 01:33 400 SwTest.java 2 個のファイル 1,005 バイト 2 個のディレクトリ 24,369,549,312 バイトの空き領域
  • 5. なぜ? • 最新(Java 13)で、すでに修正されていた – Java 12 で見つかったバグだった – クラッシュバグは、すぐに直される • 教訓 – バグレポートの修正バージョンや影響バージョン をよく確認しよう • 改めて、Java 12 でやってみると…
  • 6. クラッシュした • スタックトレースを吐いて落ちる – 自らバグを認める C:JDK-8220018>“C:Program FilesJavajdk-12binjavac” -source 12 --enable-preview SwTest.java 注意:SwTest.javaはプレビュー言語機能を使用します。 注意:詳細は、-Xlint:previewオプションを指定して再コンパイルしてください。 コンパイラで例外が発生しました(12)。Bug Database (http://bugs.java.com)で 重複がないかをご確認のうえ、Java bugレポート・ページ (http://bugreport.java.com)でJavaコンパイラに対するbugの登録をお願いいた します。レポートには、そのプログラムと下記の診断内容を含めてくだ さい。ご 協力ありがとうございます。 java.lang.AssertionError at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:155) at jdk.compiler/com.sun.tools.javac.util.Assert.check(Assert.java:46) at jdk.compiler/com.sun.tools.javac.jvm.Gen.visitBreak(Gen.java:1707) at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBreak.accept(JCTree.java:1561) at jdk.compiler/com.sun.tools.javac.jvm.Gen.genDef(Gen.java:595) at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:630) at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:616)
  • 7. Java VM のバグ • JDK-8226798 – JVM crash in klassItable::initialize_itable_for_interface(int, InstanceKlass*, bool, Thread*) – 影響バージョン:8, 11, 12.0.1, 13, 14 – 修正バージョン:14 • パッケージプライベートのメソッドと、 インタフェースのデフォルトメソッドの両方で 同じメソッドが定義されているなどの条件で、 実行時に Java VM がクラッシュするバグ
  • 8. 再現コード • なぜかデフォルトメソッドが2つあると再現する らしい public class VTableTest { interface Intf { public default void m() { } public default void unusedButNeededToReproduceIssue() { } } static class B extends pkg.A implements Intf { } static class C extends B { public void m() { System.out.println("In C.m()"); } } public static void main(String[] args) { new C().m(); } } package pkg; public class A { void m() { } } !?
  • 9. 実行結果 • EXCEPTION_ACCESS_VIOLATIONでクラッシュ C:JDK-8226798>"C:Program FilesJavajdk-13binjava" VTableTest # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff8eaa6da4e, pid=11948, tid=13800 # # JRE version: OpenJDK Runtime Environment (13.0+33) (build 13+33) # Java VM: OpenJDK 64-Bit Server VM (13+33, mixed mode, sharing, tiered, compressed oops, g1 gc, windows-amd64) # Problematic frame: # V [jvm.dll+0x50da4e] # # No core dump will be written. Minidumps are not enabled by default on client versions of Windows # # An error report file with more information is saved as: # C:JDK-8226798hs_err_pid11948.log # # If you would like to submit a bug report, please visit: # http://bugreport.java.com/bugreport/crash.jsp
  • 10. 正しい挙動は? • バックポートされてる – クラッシュバグは修正してくれることが多い • なので、Java 11.0.5 では正しく動く – このバージョンで実行すると…!
  • 11. 実行結果 •直ってなかった – 同じ理由でクラッシュする C:JDK-8226798>"C:Program FilesJavajdk-11.0.5binjava" VTableTest # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff8eaab927e, pid=14008, tid=10528 # # JRE version: Java(TM) SE Runtime Environment (11.0.5+10) (build 11.0.5+10-LTS) # Java VM: Java HotSpot(TM) 64-Bit Server VM (11.0.5+10-LTS, mixed mode, tiered, compressed oops, g1 gc, windows-amd64) # Problematic frame: # V [jvm.dll+0x51927e] # # No core dump will be written. Minidumps are not enabled by default on client versions of Windows # # An error report file with more information is saved as: # C:JDK-8226798hs_err_pid14008.log
  • 13. まとめ • Java はバージョンによってバグがある – 詳細はバグデータベースに公開されている • 実際に再現させてみると面白い – 思い通りにいかないことも多い • みなさんも、ぜひ遊んでみてください!