Slide 1

Slide 1 text

Java 2019/11/23 JJUG CCC 2019 Fall LINE Fukoka

Slide 2

Slide 2 text

• • LINE Fukuoka • @kis • Hatena (nowokay.hatenablog.com)

Slide 3

Slide 3 text

• # "!' & • Java# • # • • Java 14 $ %

Slide 4

Slide 4 text

• # "!' & • Java# • # • • Java 14 $ %

Slide 5

Slide 5 text

• $'# :8" @)74. • /6$'# "& 2 • ,> ;(*8 • "0B< • % !15 ?+ • -=9<3A

Slide 6

Slide 6 text

• # "!' & • Java# • # • • Java 14 $ %

Slide 7

Slide 7 text

Java • JVM • • • (JIT) Java Bytecode loading class interpret profile generate native code internal expression profile data native code Execute on CPU

Slide 8

Slide 8 text

• # "!' & • Java# • # • • Java 14 $ %

Slide 9

Slide 9 text

• • JIT • JIT •

Slide 10

Slide 10 text

• or • • OpenJDK CDS(Class Data Sharing) Java Bytecode loading class interpret profile generate native code internal expression profile data native code Execute on CPU !

Slide 11

Slide 11 text

Class Data Sharing • Java 5 Bootstrap CDS • Java 10 App CDS(JEP 310) • % • Java 12 Default CDS(JEP 341) • Bootstrap CDS &( • '$ • Java 13 Dynamic CDS(JEP 350) • ! CDS#"

Slide 12

Slide 12 text

JIT • JVM • • Alibaba Dragonwell - JWarmup Java Bytecode loading class interpret profile generate native code internal expression profile data native code Execute on CPU

Slide 13

Slide 13 text

JIT • JIT JVM • • OpenJ9 • Azul Zing - Falcon JIT Java Bytecode loading class interpret profile generate native code internal expression profile data native code Execute on CPU

Slide 14

Slide 14 text

JIT • JITJIT • OpenJ9 • JIT as a Service(JITaaS) • https://www.youtube.com/watch?v=gx8DVVFPkcQ

Slide 15

Slide 15 text

• AOT(Ahead of Time compile) • Java • • GraalVM native image • Java 9 AOT (JEP 295) Point to analysis Java Bytecode loading class generate native code internal expression native code Execute on CPU Run initialization Heap snapshot

Slide 16

Slide 16 text

JITAOT JIT AOT $ #! " CPU &%'

Slide 17

Slide 17 text

AOT • • JIT AOT Java Bytecode loading class interpret profile generate native code internal expression profile data native code Execute on CPU Point to analysis Java Bytecode loading class generate native code internal expression native code Execute on CPU Run initialization Heap snapshot

Slide 18

Slide 18 text

profile guided optimization • GraalVM EEJIT native-image

Slide 19

Slide 19 text

• # "!' & • Java# • # • • Java 14 $ %

Slide 20

Slide 20 text

• OpenJDK • HotSpot JDK • GraalVM

Slide 21

Slide 21 text

Micronaut • Micronaut • Micronaut main main ↓ System.out.println(ManagementFactory.getRuntimeMXBean().getUptime());

Slide 22

Slide 22 text

OpenJDK • Java 8Java 13 • CDS • AOT • • Compact String •

Slide 23

Slide 23 text

Java8Java13 • Java 13 0 200 400 600 800 1000 1200 1400 Java 8 Java 13 VM

Slide 24

Slide 24 text

CDS • Java 12Default CDSCDS • 13 Default CDSJava 13 0 200 400 600 800 1000 1200 1400 Java 8 13 No CDS 13 Default CDS 13 Dynamic CDS 13 App CDS VM

Slide 25

Slide 25 text

HotSpotJDK • OpenJ9JIT • GragonwellMac Linux JWarmup • Azul Zing ! 0 200 400 600 800 1000 1200 1400 Java 8 Java 13 13 App CDS OpenJ9 OpenJ9 JIT Cache VM

Slide 26

Slide 26 text

GraalVM native image • native image 0 200 400 600 800 1000 1200 1400 Java 8 Java 13 13 App CDS native image VM

Slide 27

Slide 27 text

native image • 0 5 10 15 20 25 30 35 40 45 Java 8 Java 13 CE JIT EE JIT CE AOT EE AOT

Slide 28

Slide 28 text

profile guided optimization • 0 5 10 15 20 25 30 35 40 45 Java 8 Java 13 CE JIT EE JIT CE AOT EE AOT PGO

Slide 29

Slide 29 text

• App CDS • native-image 0 50 100 150 200 250 300 350 Java 8 Java 13 13 App CDS OpenJ9 JIT Cache GraalVM JIT GraalVM AOT

Slide 30

Slide 30 text

• # "!' & • Java# • # • • Java 14 $ %

Slide 31

Slide 31 text

Java 14 • static final • GraalVM JIT • JWarmup

Slide 32

Slide 32 text

static final • https://openjdk.java.net/jeps/8209964 • ↓ • private final static Logger LOGGER = Logger.getLogger("com.foo.Bar");

Slide 33

Slide 33 text

Graal JIT • https://openjdk.java.net/jeps/8223220 • OpenJDK Graal JIT Java JIT#% • " • native-image shared library!$ 0 500 1000 1500 2000 Java 8 Java 13 13 + Graal VM" " 0 50 100 150 200 Java 8 Java 13 13 + Graal

Slide 34

Slide 34 text

JWarmup • https://openjdk.java.net/jeps/8203832 • GragonwellJWarmupOpenJDK