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