Evento/Tema: Implementaciones libres de J2SE: estado actual.
20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava...
Transcript of 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava...
![Page 1: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/1.jpg)
1 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
20 years of Java
Vladimir Ivanov HotSpot JVM Compile r Oracle Corp.
Twitter: @iwan0www OpenJDK: vlivanov
28.11.2015
![Page 2: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/2.jpg)
2 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
20 years of Java (The Platform)
Vladimir Ivanov HotSpot JVM Compile r Oracle Corp.
Twitter: @iwan0www OpenJDK: vlivanov
![Page 3: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/3.jpg)
3 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Safe Harbor Statement
The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
![Page 4: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/4.jpg)
4 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
About me
1996 2002 2010 2015 2005
JDK 1.0
Wrote my first program in Java.
Joined Sun Microsystems
(SPBDC) to work on HotSpot JVM Now
Became part of Oracle Corp.
after acquisition
![Page 5: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/5.jpg)
5 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1991: Project Green
![Page 6: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/6.jpg)
6 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1991: *7 (StarSeven) Oak programming language
![Page 7: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/7.jpg)
7 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1991: *7 (StarSeven) Duke
![Page 8: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/8.jpg)
8 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1994: WebRunner/HotJava browser
![Page 9: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/9.jpg)
9 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1995: First release: 1.0a2
![Page 10: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/10.jpg)
10 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Intel Pentium P54CS, 0.35µm, 200MHz, 66MHz FSB
![Page 11: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/11.jpg)
11 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Sun Enterprise 10000 64 UltraSPARC II CPUs, 400 MHz, 16x4GB RAM
![Page 12: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/12.jpg)
12 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1996: JDK 1.0
§ 6 packages – java.applet – java.awt – java.io – java.lang – java.net – java.util
January, 23
§ # of classes – java/ 225 – sun/ 379
![Page 13: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/13.jpg)
13 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1996: picoJava
![Page 14: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/14.jpg)
14 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1997: JDK 1.1 February, 19
![Page 15: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/15.jpg)
15 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1998: J2SE 1.2 December, 8
![Page 16: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/16.jpg)
16 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1999: J2SE, J2ME, J2EE
![Page 17: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/17.jpg)
17 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1999: J2SE, J2ME, J2EE
![Page 18: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/18.jpg)
18 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2000: J2SE 1.3 May, 8
![Page 19: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/19.jpg)
19 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
1998: JCP
![Page 20: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/20.jpg)
20 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2002 February, 6
![Page 21: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/21.jpg)
21 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
First release
1995 1997 2002
Java Releases
1996 1998
JDK 1.0
JDK 1.1
J2SE 1.2
2000
J2SE 1.3
J2SE 1.4
Inner classes JavaBeans
JDBC RMI
Reflection JNI
Swing JIT compiler Java Plug-in Collections
HotSpot JVM JNDI
Java Sound JVMDI JVMPI
Regular Expressions IPv6 support
Logging XML, XSLT
Java Web Start
January, 23
February, 19
December, 8
May, 8
February, 6
March
AWT Network
I/O
![Page 22: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/22.jpg)
22 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2004: J2SE 5.0 September, 30
![Page 23: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/23.jpg)
23 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2004: J2SE 5.0 September, 30
![Page 24: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/24.jpg)
24 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2006: Java SE 6
§ Scripting Language Support (JSR 223) § Java Compiler API (JSR 199) § Support for pluggable annotations (JSR 269) § Numerous performance improvements
– C1: new linear register allocator – C1: IR in SSA form
December, 11
![Page 25: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/25.jpg)
25 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Java SE 6u
§ Escape analysis in C2 – 6u23
§ NUMA GC Enhancements – Java SE 6u2
§ Compressed OOPs – 6u23
§ Tiered compilation
HotSpot Express
![Page 26: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/26.jpg)
26 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2007 May, 8
![Page 27: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/27.jpg)
27 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2007: May JavaFX 1.0 on December, 2008
![Page 28: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/28.jpg)
28 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
![Page 29: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/29.jpg)
29 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2010
![Page 30: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/30.jpg)
30 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2011: Java SE 7
§ JVM support for dynamic languages (JSR 292) § Small language changes
– e.g. strings in switch, try-with-resources § New file I/O library (defined by JSR 203)
July, 28
![Page 31: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/31.jpg)
31 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2014: Java SE 8
§ JSR 335: Language-level support for lambda expressions
§ JSR 223: Project Nashorn, a JavaScript runtime § JSR 308: Annotation on Java Types § JSR 310: Date and Time API § JEP 122: Remove the permanent generation
March, 18
![Page 32: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/32.jpg)
32 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2014: Java SE 8 March, 18
![Page 33: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/33.jpg)
33 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
2016: Java SE 9 ETA: September, 22
Project Jigsaw Scalability Performance Security
http://openjdk.java.net
![Page 34: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/34.jpg)
34 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw Scalability
![Page 35: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/35.jpg)
35 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Java 8
4 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
authjdbc jaxpnaming
jaxwscompiler
rowsetxmldsig
crypto
corba
desktop
tools.jre
httpserver
tools
tools.jaxws tools.base
devtools
javafx
prefssctp jx.annotationsinstrument
54MB 30 16 11 nashorn
rmi
compact1
JRE
compact3
compact2
JDK
![Page 36: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/36.jpg)
36 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
naming.rmi
base charsets
se
compact3
compact2
compact1
logging scrip:ng
security.acl
security.sasl
sql rmi
xml xml.crypto
prefs desktop
ac:va:on
corba
compiler management
sql.rowset
security.jgss
instrument
naming
xml.ws
xml.soap
xml.bind
annota:ons.common
hBpserver
rmic
javadoc
xml.ws
xml.bind
compiler
hotspot.agent
jconsole jcmd jdi
aBach
jvmstat
naming
smartcardio crypto.ec
crypto.pkcs11
hprof.agent jdwp.agent
localedata sctp
zipfs security.auth
scripting. nashorn
Project Jigsaw Performance
![Page 37: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/37.jpg)
37 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw
4 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
tlslogging
authjdbc
jta
jaxpnaming
jaxwscompiler
rowset
kerberosmanagement
xmldsig
crypto
cosnaming management.iiop
corba
desktop
tools.jre
httpserver
tools
tools.jaxws tools.base
devtools
javafx
prefssctp jx.annotations
nashorn
instrument base
script
rmi
![Page 38: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/38.jpg)
38 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw
4 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
tlslogging
authjdbc
jta
jaxpnaming
jaxwscompiler
rowset
kerberosmanagement
xmldsig
crypto
cosnaming management.iiop
corba
desktop
tools.jre
httpserver
tools
tools.jaxws tools.base
devtools
javafx
prefssctp jx.annotations
nashorn
instrument base
script
rmi
![Page 39: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/39.jpg)
39 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw
4 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
tlslogging
authjdbc
jta
jaxpnaming
jaxwscompiler
rowset
kerberosmanagement
xmldsig
crypto
cosnaming management.iiop
corba
desktop
tools.jre
httpserver
tools
tools.jaxws tools.base
devtools
javafx
prefssctp jx.annotations
nashorn
instrument base
script
rmi
![Page 40: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/40.jpg)
40 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw
4 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
crypto
javafx
nashorn
base
script
![Page 41: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/41.jpg)
41 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
j l i n k
9 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
*.jmod $JRE/bin/java
/ l i b / . . .
* . j a r
* .c lass
JVM image
. j a r
.jmod
Fat binary
![Page 42: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/42.jpg)
42 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw Opportunities for performance improvements
rt.jar
nashorn.jar, jfxrt.jar,sunjce_provider.jar
myapp.jar
crypto
javafx
nashornbase
script
![Page 43: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/43.jpg)
43 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw
§ Improved class loading architecture – fast class lookup
Opportunities for performance improvements crypto
javafx
nashornbase
script
![Page 44: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/44.jpg)
44 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw
§ Improved class loading architecture – fast class lookup
Opportunities for performance improvements crypto
javafx
nashornbase
script
![Page 45: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/45.jpg)
45 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw
§ Improved class loading architecture – fast class lookup
§ Aggressive inlining
Opportunities for performance improvements crypto
javafx
nashornbase
script
![Page 46: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/46.jpg)
46 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw
§ Improved class loading architecture – fast class lookup
§ Aggressive inlining § Ahead-Of-Time compilation
Opportunities for performance improvements crypto
javafx
nashornbase
script
![Page 47: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/47.jpg)
47 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw
§ Improved class loading architecture – fast class lookup
§ Aggressive inlining § Ahead-Of-Time compilation § JVM-specific memory images
– e.g. Application Class Data Sharing (AppCDS)
Opportunities for performance improvements crypto
javafx
nashornbase
script
![Page 48: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/48.jpg)
48 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Jigsaw
§ Improved class loading architecture – fast class lookup
§ Aggressive inlining § Ahead-Of-Time compilation § JVM-specific memory images
– e.g. Application Class Data Sharing (AppCDS)
§ Removal of unused fields/methods/classes
Opportunities for performance improvements crypto
javafx
nashornbase
script
![Page 49: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/49.jpg)
49 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
sun.* * . in te rna l .*
17 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Project Jigsaw Security
![Page 50: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/50.jpg)
50 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
sun.misc.Unsafe?!
17 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Project Jigsaw Security
![Page 51: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/51.jpg)
51 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
- How many of you have used the Unsafe API? …
John Rose JVM Architect, Oracle Corporation
Project Jigsaw & sun.misc.Unsafe
@ JVM Language Summit 2014
![Page 52: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/52.jpg)
52 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
- How many of you have used the Unsafe API? …
- A lot of you. Gosh, I'm sorry.
John Rose JVM Architect, Oracle Corporation
Project Jigsaw & sun.misc.Unsafe
@ JVM Language Summit 2014
![Page 53: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/53.jpg)
53 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
![Page 54: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/54.jpg)
54 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
JEP 260: Encapsulate Most Internal APIs
§ Replacement exists in JDK 8 – Encapsulate/remove the method in JDK 9
§ Replacement exists in JDK 9 – Deprecate in JDK9
§ No replacement exists in JDK 9 – (For widely used internal API) Leave accessible
![Page 55: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/55.jpg)
55 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Critical Internal APIs
§ sun.misc.Cleaner § sun.misc.{Signal,SignalHandler} § sun.misc.Unsafe § sun.reflect.Reflection::getCallerClass § sun.reflect.ReflectionFactory
![Page 56: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/56.jpg)
56 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
sun.misc.Unsafe
Use case Example methods
Concurrency primitives Unsafe.compareAndSwap*
Serialization Unsafe.allocateInstance (ReflectionFactory.newConstructorForSerialization)
Efficient memory management, layout, and access
Unsafe.allocate/freeMemory Unsafe.get*/put* (and JNI)
Interoperate across the JVM boundary
Unsafe.get*/put* (and JNI)
![Page 57: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/57.jpg)
57 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
sun.misc.Unsafe
Use case Replacement
Concurrency primitives JEP 193 Variable Handles
Serialization Reboot JEP 187 Serialization Improvements
Efficient memory management, layout, and access
Project Panama, Project Valhalla, Arrays 2.0, Better GC
Interoperate across the JVM boundary
Project Panama, JEP 191 Foreign Function Interface
![Page 58: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/58.jpg)
58 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
sun.misc.Unsafe (JDK 9)
Use case Replacement
Concurrency primitives JEP 193 Variable Handles
Serialization Reboot JEP 187 Serialization Improvements
Efficient memory management, layout, and access
Project Panama, Project Valhalla, Arrays 2.0, Better GC
Interoperate across the JVM boundary
Project Panama, JEP 191 Foreign Function Interface
![Page 59: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/59.jpg)
59 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
![Page 60: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/60.jpg)
60 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
JEP 193: Variable Handles
1. Safe, performant, enhanced atomics – access to field and array elements
2. Fence operations for fine-grained control of memory ordering – replacements for Unsafe::{full,store,load}Fence and more
3. Reachability fence – java.lang.ref.Reference::reachabilityFence
![Page 61: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/61.jpg)
61 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Charles Oliver Nutter JRuby Lead Developer
“The most fundamental change to Java since its inception.”
Java 7: Method Handles
![Page 62: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/62.jpg)
62 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Method Handles
![Page 63: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/63.jpg)
63 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
(1) Variable Handles
§ like method handles for data – Abstracts over location
§ static fields, instance fields, arrays, off heap – Supports explicit fences and atomic operations
§ Safer than Unsafe, as fast as method handles
![Page 64: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/64.jpg)
64 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Are sun.misc.Unsafe methods really fast?
§ Not necessarily… – public native Object allocateInstance(Class<?> cls) throws …;
– Array index vs raw offset long[] base = new long[…]; int idx = …; long offset = (((long) idx) << SCALE + OFFSET) long value = Unsafe.getLong(base, offset);
– JDK-8078629: “VM should constant fold Unsafe.get*() loads from final fields”
![Page 65: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/65.jpg)
65 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
(1) Variable Handles
![Page 66: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/66.jpg)
66 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
(2) Memory Fences
a = ?, b = ?
Thread #1 Thread #2
![Page 67: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/67.jpg)
67 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
(2) Memory Fences
[a,b] = [0,0], [0,1], [1,0], [1,1]
Thread #1 Thread #2
![Page 68: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/68.jpg)
68 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
(2) Memory Fences
Thread #1 Thread #2
[a,b] = [0,0], [0,1], [1,0], [1,1]
![Page 69: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/69.jpg)
69 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
(3) Finalization
![Page 70: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/70.jpg)
70 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
(3) Premature Finalization
![Page 71: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/71.jpg)
71 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
(3) Premature Finalization
![Page 72: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/72.jpg)
72 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Beyond Java 9
![Page 73: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/73.jpg)
73 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Valhalla
Project Panama
Specialized Generics Value Types
Foreign Function Interface Data Layout Control Arrays 2.0
http://openjdk.java.net
![Page 74: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/74.jpg)
74 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Valhalla “The hall of valor value”
![Page 75: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/75.jpg)
75 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Value-based Class
final class Point { public final int x; public final int y; }
@since 8
“Use of identity-sensitive operations on instances of value-based classes may have unpredictable effects and should be avoided.”
ValueBased javadoc
![Page 76: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/76.jpg)
76 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Value-based Class
Point[] points =
Arrays
h header
x y
x y
x y
x y
x y
x y
![Page 77: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/77.jpg)
77 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Value-based Class
Point[] points =
Arrays
h header
x y
x y
x y
x y
x y
x y
for (Point p : points) { sum += p.x + p.y; }
![Page 78: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/78.jpg)
78 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Value-based Class
int[] xPoints =
Arrays
h header
assert(xPoints.length == yPoints.length); for (int i = 0; i < xPoints.length; i++) { sum += xPoint[i] + yPoint[i]; }
h header
x x x x x x
y y y y y y int[] yPoints =
![Page 79: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/79.jpg)
79 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Value-based Class
int[] points =
Arrays
h header
assert(points.length % 2 == 0); for (int i = 0; i < points.length; i+=2) { sum += points[i] + points[i+1]; }
x y x y x y x y x y x y
![Page 80: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/80.jpg)
80 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
“Codes like a class, works like an int!”
John Rose, Brian Goetz, Guy Steele
“State of the Values”
![Page 81: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/81.jpg)
81 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Value Types Arrays
value class Point { public final int x; public final int y; }
Point[] points = h header x y x y x y x y x y x y
for (Point p : points) { sum += points.x + points.y; }
![Page 82: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/82.jpg)
82 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Motivation
§ Smaller footprint – no object header
§ Better locality – no dereference
§ Simpler semantics – no identity, no aliasing
§ No object allocation
Value Types
![Page 83: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/83.jpg)
83 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Value Types
value class Point { public final int x; public final int y; } class Rectangle { public final Point corner1; public final Point corner2; }
Concurrent side effects
x xy yh header
Rectangle r =
x y
x y
h header
Rectangle r =
![Page 84: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/84.jpg)
84 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Value Types
value class Point { public final int x; public final int y; } class Rectangle { public Point corner1; public volatile Point corner2; }
Concurrent side effects
x xy yh header
Rectangle r =
x y
x y
h header
Rectangle r =
![Page 85: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/85.jpg)
85 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Use cases
§ Numerics: complex, decimal, rarely-big-num, etc. § Native types: int128_t, vectors, unsigned, safe native pointers § Algebraic data: optional (no box), choice-of, unit (no bits) § Tuples: multiple-value return! (requires specialization machinery also) § Cursors: unboxed iterators, STL-style bounds § Flat data: values naturally represent pointer-poor data structures
![Page 86: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/86.jpg)
86 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Selected details
Point[] <:? Object[]
![Page 87: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/87.jpg)
87 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Selected details
Point[] <: Object[]
Point[] points = h header x y x y x y x y x y x y
![Page 88: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/88.jpg)
88 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization Motivation
ArrayList<Integer>
![Page 89: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/89.jpg)
89 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization Motivation
ArrayList<int>
![Page 90: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/90.jpg)
90 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Objects
§ Object, String, …, MyClass, …, Integer, Long, …
– 8 primitive types (+ reference)
§ boolean, byte, short, char, int, long, float, double
vs Primitives
![Page 91: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/91.jpg)
91 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Objects
§ Object, String, …, MyClass, …, Integer, Long, …
– 8 primitive types (+ reference)
§ boolean, byte, short, char, int, long, float, double
– Value types
§ User-defined (!!!)
vs Non-objects
![Page 92: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/92.jpg)
92 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization Motivation
ArrayList<Point>
![Page 93: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/93.jpg)
93 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization
class Box<T> { T val; public Box(T val) { this.val = val; } public T get() { return val; } }
![Page 94: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/94.jpg)
94 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization
class Box<T> { T val; public Box(T val) { this.val = val; } public T get() { return val; } }
![Page 95: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/95.jpg)
95 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization
class Box<Object> { Object val; public Box(Object val) { this.val = val; } public Object get() { return val; } }
![Page 96: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/96.jpg)
96 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization
class Box< int> { int val; public Box(int val) { this.val = val; } public int get() { return val; } }
![Page 97: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/97.jpg)
97 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization
class Box<any T> { T val; public Box(T val) { this.val = val; } public T get() { return val; } }
![Page 98: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/98.jpg)
98 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization
class Box extends Object { private final Object t; public Object get() { 0: aload_0 1: getfield #2 //Field t:LObject; 4: areturn } }
![Page 99: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/99.jpg)
99 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization
class Box extends Object { private final int t; public int get() { 0: aload_0 1: getfield #2 //Field t:I; 4: ireturn } }
![Page 100: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/100.jpg)
100 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization
class Box extends Object { private final Object*T t; public Object*T get() { 0: aload_0 1: getfield #2 //Field t:Lobject*T; 4: areturn*T } }
![Page 101: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/101.jpg)
101 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization
Box<Integer> :> Box
![Page 102: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/102.jpg)
102 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization
Box<int> :>? Box
![Page 103: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/103.jpg)
103 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Generic Specialization
Box<int> :> Box
Box<int> :> Box<?> Box<Object> :> Box<?>
Box :> Box<?>
![Page 104: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/104.jpg)
104 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Panama “Bridging the gap”
![Page 105: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/105.jpg)
105 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
“If non-Java programmers find some library useful and easy to access, it should be similarly accessible to Java programmers.”
John Rose, JVM Architect,
Oracle Corporation
![Page 106: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/106.jpg)
106 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
JNI @since 1.1
![Page 107: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/107.jpg)
107 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
JNI
A victim of its own success?
![Page 108: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/108.jpg)
108 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
JNI Usage scenario
![Page 109: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/109.jpg)
109 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
JNI
Java: public class GetPid { public static native long getpid(); }
C/C++:
get_pid.h: JNIEXPORT jlong JNICALL Java_GetPid_getpid (JNIEnv *, jclass); get_pid.c: jlong JNICALL Java_GetPidJNI_getpid(JNIEnv *env, jclass c) {
return getpid(); }
![Page 110: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/110.jpg)
110 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
JNI: Method Invocation
1. if (GC_locker::needs_gc()) SharedRuntime::block_for_jni_critical()
2. transition to thread_in_native 3. unpack array arguments
4. call native entry point
Runtime checks before and after native call
1. call native entry point 2. check for safepoint in progress
3. check if any thread suspend flags are set – call into JVM and possibly unlock the
JNI critical if a GC was suppressed while in the critical native
4. transition to thread_in_Java
5. return
![Page 111: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/111.jpg)
111 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI Easier, safer, faster!
![Page 112: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/112.jpg)
112 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
sun.misc.Unsafe § Anti-JNI
![Page 113: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/113.jpg)
113 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Unsafe.getUnsafe().
putInt(new Object(), 0, 0)
![Page 114: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/114.jpg)
114 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Unsafe.getUnsafe().
putInt(null, 0, 0)
![Page 115: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/115.jpg)
115 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI Easier, safer, faster!
![Page 116: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/116.jpg)
116 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI
pid_t get_pid();
![Page 117: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/117.jpg)
117 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI
public interface GetPid { long getpid(); }
Easier
![Page 118: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/118.jpg)
118 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI
public interface GetPid { long getpid(); } GetPid getpid = Library.load(GetPid.class, “c” /* lib_name */ );
Easier
![Page 119: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/119.jpg)
119 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI
public interface GetPid { long getpid(); } GetPid getpid = Library.load(GetPid.class, “c” /*lib_name*/ ); getpid.getpid();
Easier
![Page 120: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/120.jpg)
120 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI Faster
callq 0x1057b2eb0 ; getpid entry
![Page 121: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/121.jpg)
121 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI gettimeofday
/* time.h */ struct { time_t tv_sec; suseconds_t tv_usec; } timeval;
int gettimeofday(struct timeval* tv, struct timezone* tz);
struct { int tz_minuteswest; int tz_dsttime; } timezone;
![Page 122: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/122.jpg)
122 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI $ jextract time.h
interface Time { interface Timeval { long tv_sec$get(); void tv_sec$set(long); long tv_usec$get(); void tv_usec$set(long); }
int gettimeofday(Timeval, Timezone);
interface Timezone { long tz_...$get(); void tz_...$set(long); long tz_...$get(); void tz_...$set(long); }
![Page 123: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/123.jpg)
123 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI Runtime Library lib = Library.create(“c”); Time time = lib.create(Time.class); Timeval tval = lib.create(Timeval.class); Timezone tzone = null; int res = time.gettimeofday(tval, tzone); if (res == 0) { long tv_sec = tval.tv_sec$get(); long tv_usec = tval.tv_usec$get(); }
![Page 124: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/124.jpg)
124 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI Resources
Timeval tval; try { tval = lib.create(Timeval.class); int res = time.gettimeofday(tval, null); if (res == 0) { long tv_sec = tval.tv_sec$get(); long tv_usec = tval.tv_usec$get(); } } finally { lib.free(tval); tval = null; }
![Page 125: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/125.jpg)
125 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI Resources
try (Timeval tval = lib.create(Timeval.class)) { int res = time.gettimeofday(tval, null); if (res == 0) { long tv_sec = tval.tv_sec$get(); long tv_usec = tval.tv_usec$get(); } }
![Page 126: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/126.jpg)
126 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI
§ no crashes § no leaks § no hangs § no privilege escalation § no unguarded casts
Safer
![Page 127: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/127.jpg)
127 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Better JNI
![Page 128: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/128.jpg)
128 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Valhalla
http://openjdk.java.net
Project Panama
Specialized Generics Value Types
Foreign Function Interface Data Layout Control Arrays 2.0
![Page 129: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/129.jpg)
129 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Project Valhalla
http://openjdk.java.net
valhalla-‐[email protected] http://hg.openjdk.java.net/valhalla/valhalla
Project Panama panama-‐[email protected] http://hg.openjdk.java.net/panama/panama
![Page 130: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/130.jpg)
130 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Duke
1995 2015
![Page 131: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/131.jpg)
131 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
![Page 132: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/132.jpg)
132 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Safe Harbor Statement
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
![Page 133: 20 years of Java - Oraclecr.openjdk.java.net/~vlivanov/talks/2015_Java_20_years_Minsk.pdfJava Releases 1996 1998 JDK 1.0 JDK 1.1 J2SE 1.2 2000 J2SE 1.3 J2SE 1.4 Inner classes JavaBeans](https://reader036.fdocuments.in/reader036/viewer/2022081402/5f0aca277e708231d42d5a51/html5/thumbnails/133.jpg)
133 Copyright © 2015, Oracle and/or its affiliates. All rights reserved
Graphic Section Divider