6. Java new release cycle.
• Feature release every 6 months
– March and September(春分の⽇/秋分の⽇)
• Maintenance release every 3 months
– April and July for March release
– October and January for September release
• Long Term Support every 3 years
– The first LTS is for JDK 11
• Oracle JDK will be for only Oracle
customer
– Use OpenJDK instead.
8. Java SE 8 support is extended
• Oracle has extended Java SE 8
support at least until 2019/1
• It is available for the personal use
until 2020/12
• Java SE 8 support will finish after 3
months of JDK 11 release.
• We should move to JDK 11 by 2019/1
http://www.oracle.com/technetwork/jp/java/eol-135779-ja.html
9. Desktop technology
• Applet and Web Start is no longer
supported after JDK 11
• JavaFX will not be bundled with JDK11
– So far OpenJDK had not bundled JavaFX
• AWT and Swing will be supported
– There are many commits for JDK 11
11. Java 10 JEPs
• 286 Local-Variable Type Inference
• 296 Consolidate the Repository
• 304 GC Interface
• 307 Parallel Full GC for G1
• 310 Application Class-Data Sharing
• 312 Thread-Local Handshakes
• 313 Remove the Native-Header Generation Tool(javah)
• 314 Additional Unicode Language-Tag Extensions
• 316 Heap Allocation on Alternative Momory Devices
• 317 Experimental Java-Based JIT Compiler
• 319 Root Certificates
• 322 Time-Based Release Versioning
12. 286: Local-Variable Type
Inferences
• var list = new ArrayList<String>()
• `var` is not a keyword
– but a special type
• We can use `var` as a variable name
• We can use `var` as a method name
• We can not use `var` as a class name
13. Where can we use `var`?
• OK
– Right Oprand has the type
• var strs = new ArrayList<String>();
• var path = Path.of(“http://example.com”);
• Should not
– Enclosing type
• ex: Supplier<String>, Optional<String>
ListenableFuture<String>
• var name = findName(id);
print(name.get()); // How should we care?
14. Another usage for `var`
• Anonymous class become useful
– ex: defining a local method
• var m = new Object() {
int twice(int x) {
return x * 2;
}
};
print(m.twice(3));
15. 304: Garbage-Collector
Interface
• GC is modularized.
• There are many GCs that will come.
– Epsilon GC
– ZGC
– Shenandoah
• Not to control GC by user code
16. 317: Experimental Java-Based
JIT Compiler
• Project Metoropolis
– java-on-java
• We can write JVM even with Scala?
– There is a possibility.
17. 307: Parallel Full GC for G1
• G1GC had been the default GC on JDK
9
• Full GC for G1 was not parallel.
• Until JDK 8, Parallel GC was the
default
• To smooth migration, Full GC for
G1GC also parallelize.
• But full GC should not occur.
– Ideally, it has no effect for us.
18. 310: Application Class-Data
Sharing
• CDS for system class is introduced in
JDK 5
• Share class data between multiple
JVM
on the same machine
– startup performance
– reduce the resource footprint
• JDK 10 allow to use CDS for
application class
21. 314: Additional Unicode
Language-Tag Extensions
• Enhance java.util.Locale
• additional Unicode extensions
of BCP 47 language tag
– currency type
– the first day of the week
– region override
– time zone
22. 316: Heap Allocation on
Alternative Memory Devices
• Now we can use non-volatile RAM(不
揮発性メモリ) such as 3D XPoint
• This will enable the JVM to use
different types of memory system
23. 319: Root Certificates
• OpenJDK doesnʼt have Root
Certificates so far
• Oracle JDK have had it.
• To smooth migration, OpenJDK have
had it.
24. API Changes
• java.io.Reader
– long transferTo(Writer)
• java.lang.mainagement.RuntimeMXBe
an
– long getPid()
• java.util.List/Map/Set
– copyOf(Collection)
• java.util.stream.Collectors
– toUnmodifiableList/Set/Map
25. Docker aware
• Until JDK 9, JVM use the platform CPU
count/Memory size even if it is running
on Docker.
• JDK 10, JVM can use Docker setting for
CPU count/ Memory size if it is running
on Docker.
• VM Options
– -XX:InitialRAMPercentage
– -XX:MaxRAMPercentage
– -XX:MinRAMPercentage
26. Other Changes
• Kerberos configuration file krb5.conf
include *.conf in INCLUDEDIR
• -d32 and –d64 has been removed
• new JavaDoc tag. {@summary}
• policytool has been removed
• XMLInputFactory.newFactory() has
been “de-deprecated”
– it had been deprecated by mistake.
28. Java 11 JEPs
• 309 Dynamic Class-File Constants
• 318 Epsilon: A No-Op Garbage Collector
• 320 Remove the Java EE and CORBA Modules
• 321 HTTP Client(Standard)
• 323 Local-Variable Syntax for Lambda Parameters
• 324 Key Agreement with Curve25519 and Curve448
• 327 Unicode 10
• 328 Flight Recorder
• 329 ChaCha20 and Poly1305 Cryptographic Algorithms
• 330 Launch Single-File Source-Code Programs
29. Expected JEPs for JDK11
• 326 Raw String Literals
• 325 Switch Expressions
• 181 Nest-Based Access Control
30. Launch Single-File Source-Code
Programs
• java Hello.java
– The file name does not need to be related
with the class name
• Shebang
– #! /usr/bin/java –source 10
– chmod +x hello
– ./hello
31. Raw String Literals
• var sql = ```select NAME
from MEMBER
where id=1```
• var regexp = ```hello¥¥n```
// same as “hello¥¥¥¥n”
• How to address indent
32. Switch Expressions
• Now `switch` is a statement
• int i;
switch (s) {
case “start”:
case “begin”:
i = 0;
break;
case “end”:
i = 1;
break;
default:
i = 2;
43. Nestmate
• To address inner class accessibility
• class Outer {
private int a;
class Inner {
void foo() { print(a); }
}
}
-> Outer & Outer$Inner
• Need to access the private member
• from Valhalla!
44. How to access
the nestmateʼs private now
• class Outer {
private int a;
int access$000() { return a;}
}
class Outer$Inner{
Outer outer;
void foo() { print(outer.access$000()); }
}
• It make some problem for the
Specialization in the Vallhala project
52. ArrayIndexOutOfBoundsException
• jshell> new int[]{}[0]
| java.lang.ArrayIndexOutOfBoundsException thrown: 0
| at (#1:1)
->
jshell> new int[]{}[0]
| Exception java.lang.ArrayIndexOutOfBoundsException:
Index 0 out of bounds for length 0
| at (#8:1)
53. How about Stream#toList?
• modifiable? unmodifiable?
• What order?
• “it nulls a property of the Stream API
we have take time to keep.
The whole Stream API doesn't
depends on the Collection API”
55. Oracle JDK
• Same as the current support
• Very expensive for web servicer
• 100 servers on AWS -> 1おくえん
56. OpenJDK
• Official publishment says it has only 6
months support for each JDK release.
No LTS
• Mark Reinhold said OpenJDK will have
LTS
– but not on the web site yet
– LTS support is for 3 years. No overlap.
57. AdoptOpenJDK
• Project by London JUG
• IBM suponsored
• Provide pre-build JDK
• LTS support for 4 years
58. Zulu
• Provided by Azul System
• Free to download and use
• Enterprise support
– 100 servers $28,750/year
– unlimited servers $258,750/year
59. Support the new era
after Heisei
• Start to support the new era as
NewEra
• JDK12 will release 2019/3
• The new era will release early 2019/4
• JDK maintenance release will be late
2019/4
– JDK 12.0.1
• The new era will start 2019/5