Java 10まとめと、どうなる
Java 11
2018/5/26 JJUG CCC 2018
Spring
きしだ なおき
About me
•  Naoki Kishida
•  LINE Fukuoka
•  @kis
Agenda
•  New Release Model
•  About JDK 10
•  About JDK 11
•  About Java Support
New Release Model
6-monthly release
•  Oracle had announced they will
release Java every 6 months at
2017/9/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.
Version number
•  2018/03 Feature release JDK10
•  2018/04 Maintenance release JDK10.0.1
•  2018/07 Maintenance release JDK10.0.2
•  2018/09 Feature release JDK11 LTS
•  2018/10 Maintenance release JDK11.0.1
LTS
•  2019/01 Maintenance release JDK11.0.2
LTS
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
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
About JDK 10
Java 10 JEPs
•  286 Local-Variable Type Inference
•  296 Consolidate the Repository
•  304 GC Interface
•  307 Paralell Full GC for G1
•  310 Application Class-Data Sharing
•  312 Thread-Local Handshakes
•  313 Remove 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
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
Usage for `var`
•  var	m	=	new	Object()	{

		int	twice(int	x)	{

				return	x	*	2;

		}

};

print(m.twice(3));
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
317: Experimental Java-Based
JIT Compiler
•  Project Metoropolis
– java-on-java
•  We can write JVM even with Scala?
– There is a possibility.
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.
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
312: Thread-Local Handshakes
•  JVM can stop an individual thread
– stop not just all thread
314: Additional Unicode
Language-Tag Extentions
•  Enhance java.util.Locale
•  additional Unicode extensions
of BCP 47 language tag
– currency type
– the first day of the week
– region override
– time zone
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
319: Root Certificates
•  OpenJDK doesnʼt have Root
Certificates so far
•  Oracle JDK have had it.
•  To smooth migration, OpenJDK have
had it.
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
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
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-deplicated”
– it had been deplicated by mistake.
About JDK 11
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
Expected JEPs for JDK11
•  326 Raw String Literals
•  325 Switch Expressions
•  181 Nest-Based Access Control
Launch Single-File Source-Code
Programs
•  java Hello.java
•  Shebang
– #! /usr/bin/java –source 10
– chmod +x hello
– ./hello
Raw String Literals
•  var	sql	=	```select	NAME

													from	MEMBER

													where	id=1```	
•  How to address indent
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;
Switch Expressions
•  int	i	=	switch	(s)	{

		case	“start”,“begin”->	0;

		case	“end”	->	1;

		default	->	2;

}
Local-Variable Syntax for
Lambda Parameters
•  list.map(s	->	s.toUpperCase())

				.collect(toList())	
•  list.map((var	s)	->	s.toUpperCase())

				.collect(toList())
HTTP Client(Standard)
•  Guraduate the incubate
•  var	client	HttpClient.newHttpClient();

var	url	=	URI.create(url);

var	req	=	HttpRequest.newBuilder(uri).build();

HttpResponse<String>	res	=	client.send(

		req,	HttpResponse.BodyHandlers.ofString(

				Charset.forName(“utf-8”));

return	res.body();
Epsilon: A No-Op Garbage
Collector
•  Do nothing!
•  For evaluate GC performance
Remove the Java EE and
CORBA Modules
•  No one uses CORBA!
•  The size is large
•  Removing them, JDK will be smaller
Flight Recorder
•  Logging the performance
•  Now it is an open source
Unicode 10
•  Support Unicode 9 and Unicode 10
Nestmate
•  To address inner class accesivility
•  Valhalla!
Java 11でのAPI追加
•  String
– repeat
– lines
– isBlank
– strip/stripLeading/stripTrailing
String
•  repeat
•  isBlank
•  lines
•  strip/stripLeading/stripTrailing
Predicate::not
•  lines.filter(s -> !s.isEmpty())
→
lines.filter(Predicate.not(String::isEmp
ty))
Files
•  String Files.read(Path)
•  Path FIles.write(Path, String)
•  Files.isSameContent(Path, Path)
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)
How about Stream#toList?
•  modifiable? unmodifible?
•  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”
About Java Support
Oracle JDK
•  Same as the current support
•  Very expensive for web servicer
•  100 servers on AWS -> 1おくえん
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.
AdoptOpenJDK
•  Project by London JUG
•  IBM suponsered
•  Provide pre-build JDK
•  LTS support for 4 years
Zulu
•  Provided by Azul System
•  Free to download and use
•  Enterprise support
– 100 servers $28,750/year
– unlimited servers $258,750/year
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
Summary
•  がんばろ

Java10 and Java11 at JJUG CCC 2018 Spr

  • 1.
    Java 10まとめと、どうなる Java 11 2018/5/26JJUG CCC 2018 Spring きしだ なおき
  • 2.
    About me •  NaokiKishida •  LINE Fukuoka •  @kis
  • 3.
    Agenda •  New ReleaseModel •  About JDK 10 •  About JDK 11 •  About Java Support
  • 4.
  • 5.
    6-monthly release •  Oraclehad announced they will release Java every 6 months at 2017/9/6
  • 6.
    Java new releasecycle. •  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.
  • 7.
    Version number •  2018/03Feature release JDK10 •  2018/04 Maintenance release JDK10.0.1 •  2018/07 Maintenance release JDK10.0.2 •  2018/09 Feature release JDK11 LTS •  2018/10 Maintenance release JDK11.0.1 LTS •  2019/01 Maintenance release JDK11.0.2 LTS
  • 8.
    Java SE 8support 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 •  Appletand 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
  • 10.
  • 11.
    Java 10 JEPs • 286 Local-Variable Type Inference •  296 Consolidate the Repository •  304 GC Interface •  307 Paralell Full GC for G1 •  310 Application Class-Data Sharing •  312 Thread-Local Handshakes •  313 Remove 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.
    Usage for `var` • var m = new Object() {
 int twice(int x) {
 return x * 2;
 }
 };
 print(m.twice(3));
  • 14.
    304: Garbage-Collector Interface •  GCis modularized. •  There are many GCs that will come. – Epsilon GC – ZGC – Shenandoah •  Not to control GC by user code
  • 15.
    317: Experimental Java-Based JITCompiler •  Project Metoropolis – java-on-java •  We can write JVM even with Scala? – There is a possibility.
  • 16.
    307: Parallel FullGC 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.
  • 17.
    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
  • 18.
    312: Thread-Local Handshakes • JVM can stop an individual thread – stop not just all thread
  • 19.
    314: Additional Unicode Language-TagExtentions •  Enhance java.util.Locale •  additional Unicode extensions of BCP 47 language tag – currency type – the first day of the week – region override – time zone
  • 20.
    316: Heap Allocationon 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
  • 21.
    319: Root Certificates • OpenJDK doesnʼt have Root Certificates so far •  Oracle JDK have had it. •  To smooth migration, OpenJDK have had it.
  • 22.
    API Changes •  java.io.Reader – longtransferTo(Writer) •  java.lang.mainagement.RuntimeMXBe an – long getPid() •  java.util.List/Map/Set – copyOf(Collection) •  java.util.stream.Collectors – toUnmodifiableList/Set/Map
  • 23.
    Docker aware •  UntilJDK 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
  • 24.
    Other Changes •  Kerberosconfiguration 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-deplicated” – it had been deplicated by mistake.
  • 25.
  • 26.
    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
  • 27.
    Expected JEPs forJDK11 •  326 Raw String Literals •  325 Switch Expressions •  181 Nest-Based Access Control
  • 28.
    Launch Single-File Source-Code Programs • java Hello.java •  Shebang – #! /usr/bin/java –source 10 – chmod +x hello – ./hello
  • 29.
    Raw String Literals • var sql = ```select NAME
 from MEMBER
 where id=1``` •  How to address indent
  • 30.
    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;
  • 31.
  • 32.
    Local-Variable Syntax for LambdaParameters •  list.map(s -> s.toUpperCase())
 .collect(toList()) •  list.map((var s) -> s.toUpperCase())
 .collect(toList())
  • 33.
    HTTP Client(Standard) •  Guraduatethe incubate •  var client HttpClient.newHttpClient();
 var url = URI.create(url);
 var req = HttpRequest.newBuilder(uri).build();
 HttpResponse<String> res = client.send(
 req, HttpResponse.BodyHandlers.ofString(
 Charset.forName(“utf-8”));
 return res.body();
  • 34.
    Epsilon: A No-OpGarbage Collector •  Do nothing! •  For evaluate GC performance
  • 35.
    Remove the JavaEE and CORBA Modules •  No one uses CORBA! •  The size is large •  Removing them, JDK will be smaller
  • 36.
    Flight Recorder •  Loggingthe performance •  Now it is an open source
  • 37.
    Unicode 10 •  SupportUnicode 9 and Unicode 10
  • 38.
    Nestmate •  To addressinner class accesivility •  Valhalla!
  • 39.
  • 40.
    String •  repeat •  isBlank • lines •  strip/stripLeading/stripTrailing
  • 41.
    Predicate::not •  lines.filter(s ->!s.isEmpty()) → lines.filter(Predicate.not(String::isEmp ty))
  • 42.
    Files •  String Files.read(Path) • Path FIles.write(Path, String) •  Files.isSameContent(Path, Path)
  • 43.
    ArrayIndexOutOfBoundsException •  jshell> newint[]{}[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)
  • 44.
    How about Stream#toList? • modifiable? unmodifible? •  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”
  • 45.
  • 46.
    Oracle JDK •  Sameas the current support •  Very expensive for web servicer •  100 servers on AWS -> 1おくえん
  • 47.
    OpenJDK •  Official publishmentsays 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.
  • 48.
    AdoptOpenJDK •  Project byLondon JUG •  IBM suponsered •  Provide pre-build JDK •  LTS support for 4 years
  • 49.
    Zulu •  Provided byAzul System •  Free to download and use •  Enterprise support – 100 servers $28,750/year – unlimited servers $258,750/year
  • 50.
    Support the newera 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
  • 51.