SlideShare una empresa de Scribd logo
1 de 59
Descargar para leer sin conexión
What to expect from Java 9?
Ivan Krylov

May 21, 2016
1
@JohnWings
#J_OnTheBeach
Why talking about it now?
• Less then 1 year till scheduled release

• Now is a good time to plan and prep for it

• I am from Azul Systems - maker of compliant JDKs 

• Observing the process from aside, unbiased view on changes

• All sources for this talk are public
2
Java 9 and community
3
4
http://wiki.netbeans.org/InternalAPIsUnavailableInJava9
5
Subject: module-info.java just causes problems
Date: Wed, 4 May 2016 13:33:06 -0500
From: David M. Lloyd <david.lloyd@redhat.com>
To: jigsaw-dev <jigsaw-dev@openjdk.java.net>
Tools like Maven and JUnit are yet still having a difficult time coping
with the oddball module-info.java file. Can we just drop this thing and
let the layer provide metadata for the module? This way of defining
module metadata is clearly causing trouble. Reference: all previous
arguments from non-Oracle people over the last 5 years or so.
So far none of our software actually functions with Jigsaw, and the
prospect is not improving. In the meantime the EG is alternately
completely dead or in a state of
we'll-register-your-issue-but-cannot-help-resolve-them mode. I'm highly
concerned.
Concerns
6
“There are only two kinds of languages: 

the ones people complain about and the ones nobody uses.”
Bjarne Stroustrup
Java Timeline
JDK 6

Dec 2006
JDK 7

July
2011
JDK 8

March
2014
JDK 9

exp.
March
2017
JDK 6

Nov 2012
JDK 7

Apr
2015
JDK 8

exp.
Mar
2018
J2SE 1.4

Dec 2006
JDK 5

Oct 2009
7
GA
EOL
Java EOL & You?
EOL date

passed

Security
vulnerabilities 

keep appearing
&
Sign Support
contact
Adopt OpenJDK
(Zulu, IcedTea,
homebrew builds)
Updated to latest
JDK
8
Updates needed
Java 9 schedule (tent.)Featurecomplete
ZeroBugBounce
Rampdownphase2
FinalReleaseCandidate
May’16
Alltestsrun
RampdownStart
GeneralAvailability
Aug’16
Sept’16
Oct’16
Dec’16
Jan’17
Mar’17
9
What (was) new in Java 8
• Lambdas 

• Method references

• Type annotations 

• Repeated annotations 

• Interface a.k.a. default
methods

10
• Stream API

• Date Time API

• PermGen replacement (vendor
specific)

• Nashorn, JavaScript Engine

• new tools (jdeps,jjs,..)
http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html
How new features become part of
Java standard?
11
JEP process
12
Source: http://cr.openjdk.java.net/~mr/jep/jep-2.0-02.html
JSR
Source: https://groups.google.com/forum/#!topic/java-social/InafCPMLLaA13
Modules
14


Modules
Packages
Classes
fields &
methods
Interfaces
…
Abstract
Classes
…
Code encapsulation
15
Problems being addressed
• Java Runtime keep getting bigger and bigger

• Java 8 profiles 1, 2, 3 provide partial solutions

• Jar / Classpath Hell

• What depends on what ..

• Optional dependancies, transitive dependancies

• Lazy class loading and initialisation -> NoClassDefFoundError 

• For code that escapes packages the visibility mechanism is poor - only public

• Classes from different packages “see” each other, even from different class loaders

• SecurityManager helps to protect, but it is not on by default
16
Jigsaw
JEP 162: Prepare for Modularization

JEP 200: The Modular JDK

JEP 220: Modular Run-Time Images

JEP 201: Modular Source Code

JEP 260: Encapsulate Most Internal
APIs

JEP 282: jlink: The Java Linker

JSR 376: Java Platform Module System

JEP 261: Module System

ModularityJava Module
17
Example 1
s_module/module-info.java
module s_module {
exports services;
}
p_module/module-info.java
module p_module {
requires s_module;
}
s_module/services/LocProvider.java
package services;
import java.lang.String;
public class LocProvider {
public static String getLocation() {
return "J on the beach 2016";
}
}
p_module/presentations/ModulesDemo.java
package presentations;
import services.LocProvider;
public class ModulesDemo {
public static void main(java.lang.String[] argv) {
System.out.println("I am at “ +
LocProvider.getLocation());
}
}
Module

s_module
Module
p_module
18
New params javac/java (1)
• # Compile
• >javac -d target -modulesourcepath . 

s_module/services/LocProvider.java
• >javac -d target -modulepath target -modulesourcepath .
p_module/presentations/ModulesDemo.java
• # Run
• >java -mp target -m p_module/presentations.ModulesDemo
19
New parameters for javac/java (2)
20
• # Packaging
• jar --create --file=jars/s_module.jar -C target/
s_module .
• jar --create --file=jars/p_module.jar --main-
class=presentations/ModulesDemo -C target/p_module .
• # Run
• $j/bin/java -mp jars -m p_module
Reference: http://openjdk.java.net/projects/jigsaw/quick-start
Example 2./langtools/src/jdk.compiler/share/classes/module-info.java
module jdk.compiler {
requires public java.compiler;
exports com.sun.source.doctree;
exports com.sun.source.tree;
exports com.sun.source.util;
exports com.sun.tools.javac;
exports com.sun.tools.doclint to jdk.javadoc;
exports com.sun.tools.javac.api to jdk.javadoc, jdk.jshell;
exports com.sun.tools.javac.code to jdk.javadoc, jdk.jshell;
exports com.sun.tools.javac.comp to jdk.javadoc, jdk.jshell;
exports com.sun.tools.javac.file to jdk.jdeps, jdk.javadoc;
exports com.sun.tools.javac.jvm to jdk.javadoc;
exports com.sun.tools.javac.main to jdk.javadoc;
exports com.sun.tools.javac.model to jdk.javadoc;
exports com.sun.tools.javac.parser to jdk.jshell;
exports com.sun.tools.javac.platform to jdk.javadoc;
exports com.sun.tools.javac.tree to jdk.javadoc, jdk.jshell;
exports com.sun.tools.javac.util to jdk.jdeps, jdk.javadoc, jdk.jshell;
uses javax.annotation.processing.Processor;
uses com.sun.source.util.Plugin;
uses com.sun.tools.javac.platform.PlatformProvider;
provides com.sun.tools.javac.platform.PlatformProvider
with com.sun.tools.javac.platform.JDKPlatformProvider;
provides javax.tools.JavaCompiler
with com.sun.tools.javac.api.JavacTool; }
META-INF/services
21
Can modularised & non-modularised

code co-exist?
• Whatever is in classpath - going into unnamed modules

• Unnamed modules can access all named modules (requires *) /See next slide for a
special note/

• The reverse isn’t true - must specify requires unnamed or …

• jar file in -mp automatically being converted to a module with a name matching the
name of the jar file

• Therefore referred as automodules
• Provide transition path to jigsaw modules design
• Unnamed modules are being searched for types as a last option
22
Unnamed modules can access all
named modules
• Not so true since JDK9 build 118

• These modules are not accessible from unnamed modules:

java.activation - java.annotations.common - java.corba

java.transaction - java.xml.bind - java.xml.ws
• One can still add visibility with a flag like `-addmods java.corba`

• Source: May 17th letter from Alan Bateman: http://mail.openjdk.java.net/
pipermail/jdk9-dev/2016-May/004309.html

• More info: http://openjdk.java.net/jeps/261
23
Types of modules
• Named 

• i.e. containing module-info.class

• Automatic

• i.e. jar files placed to the module path

• Unnamed

• contains all types in the classpath
24
25
jdeps 

-genmoduleinfo
cat /Users/ivan/test/modules/generated/glassfish.corba.omgapi/module-info.java
module glassfish.corba.omgapi {
requires public java.corba;
requires public java.desktop;
requires public java.rmi;
exports com.sun.corba.ee.org.omg.CORBA;
exports javax.rmi.CORBA;
exports org.omg.CORBA;
exports org.omg.CORBA.DynAnyPackage;
exports org.omg.CORBA.ORBPackage;
exports org.omg.CORBA.TSIdentificationPackage;
exports org.omg.CORBA.TypeCodePackage;
exports org.omg.CORBA.portable;
exports org.omg.CORBA_2_3;
exports org.omg.CORBA_2_3.portable;
exports org.omg.CosNaming;
exports org.omg.CosNaming.NamingContextExtPackage;
exports org.omg.CosNaming.NamingContextPackage;
exports org.omg.CosTSInteroperation;
exports org.omg.CosTSPortability;
exports org.omg.CosTransactions;
exports org.omg.Dynamic;
exports org.omg.DynamicAny;
exports org.omg.DynamicAny.DynAnyFactoryPackage;
exports org.omg.DynamicAny.DynAnyPackage;
exports org.omg.IOP;
exports org.omg.IOP.CodecFactoryPackage;
exports org.omg.IOP.CodecPackage;
exports org.omg.Messaging;
exports org.omg.PortableInterceptor;
exports org.omg.PortableInterceptor.ORBInitInfoPackage;
exports org.omg.PortableServer;
exports org.omg.PortableServer.CurrentPackage;
exports org.omg.PortableServer.POAManagerPackage;
exports org.omg.PortableServer.POAPackage;
exports org.omg.SendingContext;
exports org.omg.stub.java.rmi;
}
jdeps
-genmoduleinfo
~/test/modules/generated/ 

glassfish-4.1.1/glassfish/modules/
glassfish-corba-omgapi.jar
26
jdeps -jdkinternals
glassfish-corba-orb.jar -> java.corba
com.sun.corba.ee.impl.copyobject.OldReflectObjectCopierImpl (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.copyobject.OldReflectObjectCopierImpl$1 (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.encoding.BufferManagerWriteStream (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.io.IIOPInputStream (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.io.IIOPInputStream$1 (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.io.IIOPOutputStream (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.io.IIOPOutputStream$1 (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.io.ObjectStreamClass (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.io.ObjectStreamClass$1 (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.io.ObjectStreamField (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.io.ObjectStreamField$1 (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl$1 (glassfish-corba-orb.jar)
-> com.sun.jndi.cosnaming.CNCtx JDK internal API (java.corba)
com.sun.corba.ee.impl.util.JDKClassLoader (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
com.sun.corba.ee.impl.util.JDKClassLoader$1 (glassfish-corba-orb.jar)
-> sun.corba.Bridge JDK internal API (java.corba)
jdeps
-jdkinternals
glassfish/
modules/
glassfish-corba-orb.jar
27
java -XaddExports
java -XaddExports
:java.base/sun.security.provider=ALL-UNNAMED,
java.base/sun.security.pkcs=ALL-UNNAMED,
java.base/sun.security.util=ALL-UNNAMED,
java.base/sun.security.x509=ALL-UNNAMED,
:
java -XaddReads
-XaddReads:java.management=testng
28
• Consider an app with extensions
• The extension might require a different version of a module than loaded before
• The extension might require service providers
• Layer of modules encapsulates
• a module graph
• mapping from each module in that graph to a class loader
• Boot layer - created by vm at start time and suitable for most apps
• App can create a new layer - new universe of modules
• Stackable - package resolution starts with the app layer and goes down to the boot layer
Layers
Modularity
Source: http://openjdk.java.net/projects/jigsaw/doc/jdk-modularization.html
JDK 7 b65JDK 8 b48JDK9 EA
29
http://cr.openjdk.java.net/~mr/jigsaw/ea/module-summary.html
More to discover
30
• Reflection. java.lang.reflect.Module class.

• multirelease jar (Since b109. Bug 8132734)

• Packages with the same name possibly leading to NoClassDefFoundException

• Layers - new concept for classloaders

• New instruments for modules development

• <java9_jigsaw>/bin/jdeps -help

• IDE are now supporting modules

• Classloaders and ways for circular dependancies between modules
Jigsaw - Unresolved issues

http://openjdk.java.net/projects/jigsaw/spec/issues/
• Module declarations

• #ModuleNameSyntax ·
#CompileTimeDependences ·
#ModuleAnnotations

• Module artifacts

• #MultiModuleExecutableJARs ·
#MultiModuleJARs · #ReifiedModuleGraphs

• Module descriptors

• #StandardModuleAttributes

• Module graphs

• #CyclicDependences

• Reflection

• #ClassFilesAsResources ·
#ResourceEncapsulation ·
#ReflectiveAccessToNonExportedTypes ·
#ReflectionWithoutReadability

• Class loaders

• #AvoidConcealedPackageConflicts ·
#PlatformClassLoader

• Versioning

• #StaticLayerConfiguration ·
#MultipleModuleVersions ·
#VersionsInModuleNames ·
#VersionedDependences
31
(My) takeaways on Java 9 modules
• Purpose - explicit listing of dependancies 

• OSGi compatible and complementary

• Will provide new optimisation paths 

• Compatible with jar/cp

• jigsaw - rough flight all way along, loosing features 

• lost ability to match versions
32
Jigsaw - links
• If you google it - discard all posts before 2014, probably even before 2015 too

• State of Jigsaw (March 8 2015)

• http://openjdk.java.net/projects/jigsaw/spec/sotms/

• JavaOne 2015 (also Devoxx BE)

• http://openjdk.java.net/projects/jigsaw/j1/

• Code was integrated in JDK9 EA build 111

• See also: http://blog.codefx.org/java/dev/features-project-jigsaw-java-9/

• http://blog.codefx.org/java/dev/javaone-2015-under-the-hood-of-project-jigsaw/
33
Syntax changes - Milling Project Coin
• Private default methods

interface I {
void a() { /*Common code*/ ; /*a’s specific code*/ }
void b() { /*Common code*/ ; /*b’s specific code*/ }
private void c() { /*Common code*/ ; }
}
34
interface II {
private void foo_private(String s); // Error: private method must declare body.
private abstract void foo_abstract(int i, int j); // Error: private & abstract: bad combo
void foo_decl(int x); // OK.
private I foo_with_body() { return null; } // OK.
}
Syntax changes - Milling Project Coin
• Effectively-final variables in try-with-resources expressions

35
public static void main(String... args) throws …{
FileReader f = new FileReader(“test.txt”);
br =new BufferedReader(fr);
try (br) {
// do something
} catch (Exception ex) {
}
}
public static void main(String... args) throws …{
FileReader f = new FileReader(“test.txt");
try (br =new BufferedReader(fr)) {
// do something
} catch (Exception ex) {
}
}
Syntax changes - Milling Project Coin
• @SafeVarargs in private methods
class VarargsFinalOnly {
@SafeVarargs private void m(List<String>... args) { }
}
36
public class TypeInferrenceTest {
Map<String, String> map =
new HashMap<String, String>()
{
{
map.put("key", "value");
}
};
}
• Using diamond with anonymous classes when actual type may be
deduced

public class TypeInferrenceTest {
Map<String, String> map =
new HashMap<> ()
{
{
map.put("key", "value");
}
};
}
Syntax changes - Milling Project Coin
37
Prior to Java 9
./TypeInferrenceTest.java:7: error: cannot infer
type arguments for HashMap<K,V>
new HashMap<>()
^
reason: cannot use '<>' with anonymous inner classes
where K,V are type-variables:
K extends Object declared in class HashMap
V extends Object declared in class HashMap
1 error
http://c2.com/cgi/wiki?DoubleBraceInitialization
Syntax changes - Milling Project Coin
•
Can’t use single _as a name
38
// key: compiler.warn.underscore.as.identifier
// options: -source 8 -Xlint:-options
class UnderscoreAsIdentifierWarning {
String _ = null;
}
Process API Updates
• JEP 102: Process API Updates

• New:

• Get pid for this JVM

• Get list of processes

• Operations on trees of processes

Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/
Process proc = Runtime.getRuntime()
.exec(new String[]{"/bin/sh", "-c", "echo $PPID"});
if (proc.waitFor() == 0) {
InputStream in = proc.getInputStream();
int available = in.available();
byte[] outputBytes = new byte[available];
n.read(outputBytes);
String pid = new String(outputBytes);
System.out.println("Your pid is " + pid);
}
System.out.println("Your pid is " + 

ProcessHandle.current().getPid());
39
Spin Loop Hint
• JEP 285: Spin-Wait Hints

• Scope: latency & performance 

• Features:

• New method j.l.Thread.onSpinWait()

• Just a hint

• on x86 - translates into 

the ‘pause’ instruction
class EventHandler {
volatile boolean eventNotificationNotReceived;
void waitForEventAndHandleIt() {
while ( eventNotificationNotReceived ) {
java.lang.Thread.onSpinWait();
}
readAndProcessEvent();
}
void readAndProcessEvent() {
// Read event from some source and process it
. . .
}
}
40
Producer/Consumer and SLH
41
Spin Loop Hint
• Cool. I have spin loops. Wait for 9?

• Just include the agrona library

• or look at java/org/agrona/hints/
ThreadHints.java 

• Works for older JDKs

42
https://github.com/real-logic/Agrona/blob/master/src/main/java/org/agrona/hints/ThreadHints.java
JShell
• Project `Kulla 

• http://openjdk.java.net/projects/kulla/

• In main trunk since JDK 9 EA build 90

• REPL as you know it for other languages

• Helps teaching Java
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
43
Jshell Demo
44
JShell - examples
• > ./images/jdk/bin/jshell
• -> String s=new String("hello");
• | Added variable s of type String with initial value “hello”
• -> new String("hello");
• | Expression value is: "hello"
• | assigned to temporary variable $1 of type String
• -> System.out.println($1);
• h
• -> ello
• -> System.out.println(“hello”); System.out.flush();
• hello
45
Garbage First is on by default
• Pros

• State-of-the-art GC in HotSpot (albeit being 10+ years old)

• Regional parallel concurrent collector

• Targeting both low pause and high throughput

• Default => Great number of users => Bugs detecter sooner => G1 will become even more robust shortly

• Cons

• Due to different characteristics it may reveal synchronisation problems in the code

• Eve after 9 years G1 has bugs with Cassandra, Elasticsearch, Lucene, perhaps, other ones are yet not
discovered?

• source (dated July 2015): https://groups.google.com/forum/#!topic/mechanical-sympathy/
JxsuVtIIOaY
46
Surviving the change of default GC
• If you used no i.e. default GC settings 

• capture the ergonomics at your deployment sites

• consider explicitly setting GC flags in all deployment scripts

• If you already had selected and tuned GC flags

• No changes, old collectors not phasing out

• In any case - keep trying G1

• Understand how GC works

• Basic algorithms and associated metrics 

• More reading: http://www.infoq.com/minibooks/java-garbage-collection
47
New JEPs briefly. Performance
• 193: Variable Handles 

• 143: Improve Contended Locking

• 266: More Concurrency Updates

• 197: Segmented Code Cache

• 165: Compiler Control

• 243: Java-Level JVM Compiler
Interface

• 246: Leverage CPU Instructions
for GHASH and RSA

• 250: Store Interned Strings in
CDS Archives

• 254: Compact Strings

• JEP 280: Indify String
Concatenation

• 230: Microbenchmark Suite
48
49
Unified JVM Logging
• For better diagnostics, uniform across all components

• 6 levels of logging x dozens of tags 

• Output to stdout / stderr / file / rotating file 

• No more badly interleaved lines

• -Xlog:help

• 11 decorators
-Xlog:classinit
-Xlog:classloaderdata
-Xlog:defaultmethods
-Xlog:itables
-Xlog:monitormismatch
-Xlog:safepoint
-Xlog:startuptime
-Xlog:vmoperation
-Xlog:vtables
-Xlog:verification
-XX:+TraceClassInitialization
-XX:+TraceClassLoaderData
-XX:+TraceDefaultMethods
-XX:+TraceItables
-XX:+TraceMonitorMismatch
-XX:+TraceSafepoint
-XX:+TraceStartupTime
-XX:+TraceVMOperation
-XX:+PrintVtables
-XX:+VerboseVerification
50
JEP 223: New Version-String Scheme
• System Property Existing Proposed
• ------------------------------- ------------ --------
• Early Access
• java.version 1.9.0-ea 9-ea
• java.runtime.version 1.9.0-ea-b73 9-ea+73
• java.vm.version 1.9.0-ea-b73 9-ea+73
• java.specification.version 1.9 9
• java.vm.specification.version 1.9 9
• Major (GA)
• java.version 1.9.0 9
• java.runtime.version 1.9.0-b100 9+100
• java.vm.version 1.9.0-b100 9+100
• java.specification.version 1.9 9
• java.vm.specification.version 1.9 9
• Minor #1 (GA)
• java.version 1.9.0_20 9.1.2
• java.runtime.version 1.9.0_20-b62 9.1.2+62
• java.vm.version 1.9.0_20-b62 9.1.2+62
• java.specification.version 1.9 9
• java.vm.specification.version 1.9 9
• Security #1 (GA)
• java.version 1.9.0_5 9.0.1
• java.runtime.version 1.9.0_5-b20 9.0.1+20
• java.vm.version 1.9.0_5-b20 9.0.1+20
• java.specification.version 1.9 9
New JEPs briefly. What’s going away?
• 231: Remove Launch-Time JRE Version Selection

• 240: Remove the JVM TI hprof Agent

• 241: Remove the jhat Tool



———————————

• Because of modules (JEP - 261)

• -Xbootclasspath & -Xbootclasspath/p

• system property sun.boot.class.path

51
New JEPs briefly. Client/graphics
• 258: HarfBuzz Font-Layout Engine

• 263: HiDPI Graphics on Windows and Linux

• 265: Marlin Graphics Renderer

• 262: TIFF Image I/O

• 257: Update JavaFX/Media to Newer Version of GStreamer (1.4.4)

• 251: Multi-Resolution Images
52
New JEPs briefly. Security
• 219: Datagram Transport Layer Security (DTLS)

• 229: Create PKCS12 Keystores by Default

• 244: TLS Application-Layer Protocol Negotiation Extension

• 249: OCSP Stapling for TLS
53
Azul Systems
• Zing: A better JVM for the enterprise

• Azul’s innovative Java runtime for business applications

• Certified Java SE builds

• Removes GC as a factor in your operation

• Supports large in-memory data stores

• Solves Java’s “warm-up” problem

• Runs on distros of RHEL, Ubuntu, SLES and CentOS



•Zulu: Java when all you need is Support 

• Free and Open Source (based on OpenJDK)

• Certified Java SE builds

• Runs on Windows, Linux & Mac

• Performance parity with Oracle Hotspot

• Optional customized “embedded” offerings
54
Unicode in Java 9
• 227: Unicode 7.0…

• … & 267: Unicode 8.0
55
56
Conclusions
56
Thanks

Q&A
@JohnWings
57
58
Backup on @SafeVarargs
@SafeVarargs // Not actually safe!
static void m(List<String>... stringLists) {
Object[] array = stringLists;
List<Integer> tmpList = Arrays.asList(42);
array[0] = tmpList; // Semantically invalid, but compiles without warnings
String s = stringLists[0].get(0); // Oh no, ClassCastException at runtime!
}
that’s it
59

Más contenido relacionado

La actualidad más candente

Apache Maven supports all Java (JokerConf 2018)
Apache Maven supports all Java (JokerConf 2018)Apache Maven supports all Java (JokerConf 2018)
Apache Maven supports all Java (JokerConf 2018)Robert Scholte
 
Java Interview Questions Answers Guide
Java Interview Questions Answers GuideJava Interview Questions Answers Guide
Java Interview Questions Answers GuideDaisyWatson5
 
Dynamic Groovy Edges
Dynamic Groovy EdgesDynamic Groovy Edges
Dynamic Groovy EdgesJimmy Ray
 
What Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
What Is Java | Java Tutorial | Java Programming | Learn Java | EdurekaWhat Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
What Is Java | Java Tutorial | Java Programming | Learn Java | EdurekaEdureka!
 
Deserialization vulnerabilities
Deserialization vulnerabilitiesDeserialization vulnerabilities
Deserialization vulnerabilitiesGreenD0g
 
Java 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawJava 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawComsysto Reply GmbH
 
Java for XPages Development
Java for XPages DevelopmentJava for XPages Development
Java for XPages DevelopmentTeamstudio
 
It pro dev_birbilis_20101127_en
It pro dev_birbilis_20101127_enIt pro dev_birbilis_20101127_en
It pro dev_birbilis_20101127_enGeorge Birbilis
 
Jdbc Complete Notes by Java Training Center (Som Sir)
Jdbc Complete Notes by Java Training Center (Som Sir)Jdbc Complete Notes by Java Training Center (Som Sir)
Jdbc Complete Notes by Java Training Center (Som Sir)Som Prakash Rai
 
Connect 2014 JMP101: Java for XPages Development
Connect 2014 JMP101: Java for XPages DevelopmentConnect 2014 JMP101: Java for XPages Development
Connect 2014 JMP101: Java for XPages Developmentpanagenda
 
JRuby in Java Projects
JRuby in Java ProjectsJRuby in Java Projects
JRuby in Java Projectsjazzman1980
 
Using Java from Ruby with JRuby IRB
Using Java from Ruby with JRuby IRBUsing Java from Ruby with JRuby IRB
Using Java from Ruby with JRuby IRBHiro Asari
 
JCP & The Future of Java
JCP & The Future of JavaJCP & The Future of Java
JCP & The Future of JavaHeather VanCura
 
Migrating Speedment to Java 9
Migrating Speedment to Java 9Migrating Speedment to Java 9
Migrating Speedment to Java 9C4Media
 
Backday Xebia : Découvrez Spring Boot sur un cas pratique
Backday Xebia : Découvrez Spring Boot sur un cas pratiqueBackday Xebia : Découvrez Spring Boot sur un cas pratique
Backday Xebia : Découvrez Spring Boot sur un cas pratiquePublicis Sapient Engineering
 
Сертификация Oracle - оптимальный процесс подготовки
Сертификация Oracle - оптимальный процесс подготовкиСертификация Oracle - оптимальный процесс подготовки
Сертификация Oracle - оптимальный процесс подготовкиNickolay Laptev
 

La actualidad más candente (20)

Apache Maven supports all Java (JokerConf 2018)
Apache Maven supports all Java (JokerConf 2018)Apache Maven supports all Java (JokerConf 2018)
Apache Maven supports all Java (JokerConf 2018)
 
Java Interview Questions Answers Guide
Java Interview Questions Answers GuideJava Interview Questions Answers Guide
Java Interview Questions Answers Guide
 
Jdbc
JdbcJdbc
Jdbc
 
Dynamic Groovy Edges
Dynamic Groovy EdgesDynamic Groovy Edges
Dynamic Groovy Edges
 
What Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
What Is Java | Java Tutorial | Java Programming | Learn Java | EdurekaWhat Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
What Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
 
Deserialization vulnerabilities
Deserialization vulnerabilitiesDeserialization vulnerabilities
Deserialization vulnerabilities
 
Introduction to Java
Introduction to JavaIntroduction to Java
Introduction to Java
 
Java 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawJava 9 Modularity and Project Jigsaw
Java 9 Modularity and Project Jigsaw
 
Java for XPages Development
Java for XPages DevelopmentJava for XPages Development
Java for XPages Development
 
It pro dev_birbilis_20101127_en
It pro dev_birbilis_20101127_enIt pro dev_birbilis_20101127_en
It pro dev_birbilis_20101127_en
 
Jdbc Complete Notes by Java Training Center (Som Sir)
Jdbc Complete Notes by Java Training Center (Som Sir)Jdbc Complete Notes by Java Training Center (Som Sir)
Jdbc Complete Notes by Java Training Center (Som Sir)
 
Connect 2014 JMP101: Java for XPages Development
Connect 2014 JMP101: Java for XPages DevelopmentConnect 2014 JMP101: Java for XPages Development
Connect 2014 JMP101: Java for XPages Development
 
JRuby in Java Projects
JRuby in Java ProjectsJRuby in Java Projects
JRuby in Java Projects
 
netbeans
netbeansnetbeans
netbeans
 
Using Java from Ruby with JRuby IRB
Using Java from Ruby with JRuby IRBUsing Java from Ruby with JRuby IRB
Using Java from Ruby with JRuby IRB
 
JCP & The Future of Java
JCP & The Future of JavaJCP & The Future of Java
JCP & The Future of Java
 
Migrating Speedment to Java 9
Migrating Speedment to Java 9Migrating Speedment to Java 9
Migrating Speedment to Java 9
 
Java 9
Java 9Java 9
Java 9
 
Backday Xebia : Découvrez Spring Boot sur un cas pratique
Backday Xebia : Découvrez Spring Boot sur un cas pratiqueBackday Xebia : Découvrez Spring Boot sur un cas pratique
Backday Xebia : Découvrez Spring Boot sur un cas pratique
 
Сертификация Oracle - оптимальный процесс подготовки
Сертификация Oracle - оптимальный процесс подготовкиСертификация Oracle - оптимальный процесс подготовки
Сертификация Oracle - оптимальный процесс подготовки
 

Destacado

CDI and Seam 3: an Exciting New Landscape for Java EE Development
CDI and Seam 3: an Exciting New Landscape for Java EE DevelopmentCDI and Seam 3: an Exciting New Landscape for Java EE Development
CDI and Seam 3: an Exciting New Landscape for Java EE DevelopmentSaltmarch Media
 
Moving to Java EE 6 and CDI and away from the clutter
Moving to Java EE 6 and CDI and away from the clutterMoving to Java EE 6 and CDI and away from the clutter
Moving to Java EE 6 and CDI and away from the clutterDan Allen
 
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJiayun Zhou
 
Designing Java EE Applications in the Age of CDI
Designing Java EE Applications in the Age of CDIDesigning Java EE Applications in the Age of CDI
Designing Java EE Applications in the Age of CDIMichel Graciano
 
CDI, Weld and the future of Seam
CDI, Weld and the future of SeamCDI, Weld and the future of Seam
CDI, Weld and the future of SeamDan Allen
 
Introduction to cdi given at java one 2014
Introduction to cdi given at java one 2014Introduction to cdi given at java one 2014
Introduction to cdi given at java one 2014Antoine Sabot-Durand
 
Extending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeExtending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeAntoine Sabot-Durand
 
Java one 2015 [con3339]
Java one 2015 [con3339]Java one 2015 [con3339]
Java one 2015 [con3339]Arshal Ameen
 
JDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUGJDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUGYuji Kubota
 
Java 9 – The Ultimate Feature List
Java 9 – The Ultimate Feature ListJava 9 – The Ultimate Feature List
Java 9 – The Ultimate Feature ListTakipi
 
Developing Modern Java Web Applications with Java EE 7 and AngularJS
Developing Modern Java Web Applications with Java EE 7 and AngularJSDeveloping Modern Java Web Applications with Java EE 7 and AngularJS
Developing Modern Java Web Applications with Java EE 7 and AngularJSShekhar Gulati
 
Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Robert Scholte
 

Destacado (13)

CDI and Seam 3: an Exciting New Landscape for Java EE Development
CDI and Seam 3: an Exciting New Landscape for Java EE DevelopmentCDI and Seam 3: an Exciting New Landscape for Java EE Development
CDI and Seam 3: an Exciting New Landscape for Java EE Development
 
Java EE 6
Java EE 6Java EE 6
Java EE 6
 
Moving to Java EE 6 and CDI and away from the clutter
Moving to Java EE 6 and CDI and away from the clutterMoving to Java EE 6 and CDI and away from the clutter
Moving to Java EE 6 and CDI and away from the clutter
 
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSF
 
Designing Java EE Applications in the Age of CDI
Designing Java EE Applications in the Age of CDIDesigning Java EE Applications in the Age of CDI
Designing Java EE Applications in the Age of CDI
 
CDI, Weld and the future of Seam
CDI, Weld and the future of SeamCDI, Weld and the future of Seam
CDI, Weld and the future of Seam
 
Introduction to cdi given at java one 2014
Introduction to cdi given at java one 2014Introduction to cdi given at java one 2014
Introduction to cdi given at java one 2014
 
Extending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeExtending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss Forge
 
Java one 2015 [con3339]
Java one 2015 [con3339]Java one 2015 [con3339]
Java one 2015 [con3339]
 
JDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUGJDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUG
 
Java 9 – The Ultimate Feature List
Java 9 – The Ultimate Feature ListJava 9 – The Ultimate Feature List
Java 9 – The Ultimate Feature List
 
Developing Modern Java Web Applications with Java EE 7 and AngularJS
Developing Modern Java Web Applications with Java EE 7 and AngularJSDeveloping Modern Java Web Applications with Java EE 7 and AngularJS
Developing Modern Java Web Applications with Java EE 7 and AngularJS
 
Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)
 

Similar a What to Expect from Java 9

Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)Mihail Stoynov
 
Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Robert Scholte
 
Modern Java Workshop
Modern Java WorkshopModern Java Workshop
Modern Java WorkshopSimon Ritter
 
JavaOne 2016: Life after Modularity
JavaOne 2016: Life after ModularityJavaOne 2016: Life after Modularity
JavaOne 2016: Life after ModularityDanHeidinga
 
Java 9 / Jigsaw - AJUG/VJUG session
Java 9 / Jigsaw - AJUG/VJUG  sessionJava 9 / Jigsaw - AJUG/VJUG  session
Java 9 / Jigsaw - AJUG/VJUG sessionMani Sarkar
 
The Diabolical Developer's Guide to Surviving Java 9
The Diabolical Developer's Guide to Surviving Java 9The Diabolical Developer's Guide to Surviving Java 9
The Diabolical Developer's Guide to Surviving Java 9jClarity
 
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DaliaAboSheasha
 
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)Robert Scholte
 
Java Platform Module System
Java Platform Module SystemJava Platform Module System
Java Platform Module SystemVignesh Ramesh
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Rittercatherinewall
 
Java jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3mJava jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3mSteve Elliott
 
Writing Android Libraries
Writing Android LibrariesWriting Android Libraries
Writing Android Librariesemanuelez
 
Leaner microservices with Java 10
Leaner microservices with Java 10Leaner microservices with Java 10
Leaner microservices with Java 10Arto Santala
 
How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17Johan Janssen
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9Ivan Krylov
 
QConSP 2018 - Java Module System
QConSP 2018 - Java Module SystemQConSP 2018 - Java Module System
QConSP 2018 - Java Module SystemLeonardo Zanivan
 

Similar a What to Expect from Java 9 (20)

Java 9 preview
Java 9 previewJava 9 preview
Java 9 preview
 
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
 
Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)
 
Modern Java Workshop
Modern Java WorkshopModern Java Workshop
Modern Java Workshop
 
JavaOne 2016: Life after Modularity
JavaOne 2016: Life after ModularityJavaOne 2016: Life after Modularity
JavaOne 2016: Life after Modularity
 
Java 9 / Jigsaw - AJUG/VJUG session
Java 9 / Jigsaw - AJUG/VJUG  sessionJava 9 / Jigsaw - AJUG/VJUG  session
Java 9 / Jigsaw - AJUG/VJUG session
 
The Diabolical Developer's Guide to Surviving Java 9
The Diabolical Developer's Guide to Surviving Java 9The Diabolical Developer's Guide to Surviving Java 9
The Diabolical Developer's Guide to Surviving Java 9
 
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11
 
Java modules
Java modulesJava modules
Java modules
 
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
 
Java Platform Module System
Java Platform Module SystemJava Platform Module System
Java Platform Module System
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Ritter
 
Java 9 sneak peek
Java 9 sneak peekJava 9 sneak peek
Java 9 sneak peek
 
Java jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3mJava jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3m
 
Writing Android Libraries
Writing Android LibrariesWriting Android Libraries
Writing Android Libraries
 
Java >= 9
Java >= 9Java >= 9
Java >= 9
 
Leaner microservices with Java 10
Leaner microservices with Java 10Leaner microservices with Java 10
Leaner microservices with Java 10
 
How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
 
QConSP 2018 - Java Module System
QConSP 2018 - Java Module SystemQConSP 2018 - Java Module System
QConSP 2018 - Java Module System
 

Más de J On The Beach

Massively scalable ETL in real world applications: the hard way
Massively scalable ETL in real world applications: the hard wayMassively scalable ETL in real world applications: the hard way
Massively scalable ETL in real world applications: the hard wayJ On The Beach
 
Big Data On Data You Don’t Have
Big Data On Data You Don’t HaveBig Data On Data You Don’t Have
Big Data On Data You Don’t HaveJ On The Beach
 
Acoustic Time Series in Industry 4.0: Improved Reliability and Cyber-Security...
Acoustic Time Series in Industry 4.0: Improved Reliability and Cyber-Security...Acoustic Time Series in Industry 4.0: Improved Reliability and Cyber-Security...
Acoustic Time Series in Industry 4.0: Improved Reliability and Cyber-Security...J On The Beach
 
Pushing it to the edge in IoT
Pushing it to the edge in IoTPushing it to the edge in IoT
Pushing it to the edge in IoTJ On The Beach
 
Drinking from the firehose, with virtual streams and virtual actors
Drinking from the firehose, with virtual streams and virtual actorsDrinking from the firehose, with virtual streams and virtual actors
Drinking from the firehose, with virtual streams and virtual actorsJ On The Beach
 
How do we deploy? From Punched cards to Immutable server pattern
How do we deploy? From Punched cards to Immutable server patternHow do we deploy? From Punched cards to Immutable server pattern
How do we deploy? From Punched cards to Immutable server patternJ On The Beach
 
When Cloud Native meets the Financial Sector
When Cloud Native meets the Financial SectorWhen Cloud Native meets the Financial Sector
When Cloud Native meets the Financial SectorJ On The Beach
 
The big data Universe. Literally.
The big data Universe. Literally.The big data Universe. Literally.
The big data Universe. Literally.J On The Beach
 
Streaming to a New Jakarta EE
Streaming to a New Jakarta EEStreaming to a New Jakarta EE
Streaming to a New Jakarta EEJ On The Beach
 
The TIPPSS Imperative for IoT - Ensuring Trust, Identity, Privacy, Protection...
The TIPPSS Imperative for IoT - Ensuring Trust, Identity, Privacy, Protection...The TIPPSS Imperative for IoT - Ensuring Trust, Identity, Privacy, Protection...
The TIPPSS Imperative for IoT - Ensuring Trust, Identity, Privacy, Protection...J On The Beach
 
Pushing AI to the Client with WebAssembly and Blazor
Pushing AI to the Client with WebAssembly and BlazorPushing AI to the Client with WebAssembly and Blazor
Pushing AI to the Client with WebAssembly and BlazorJ On The Beach
 
Axon Server went RAFTing
Axon Server went RAFTingAxon Server went RAFTing
Axon Server went RAFTingJ On The Beach
 
The Six Pitfalls of building a Microservices Architecture (and how to avoid t...
The Six Pitfalls of building a Microservices Architecture (and how to avoid t...The Six Pitfalls of building a Microservices Architecture (and how to avoid t...
The Six Pitfalls of building a Microservices Architecture (and how to avoid t...J On The Beach
 
Madaari : Ordering For The Monkeys
Madaari : Ordering For The MonkeysMadaari : Ordering For The Monkeys
Madaari : Ordering For The MonkeysJ On The Beach
 
Servers are doomed to fail
Servers are doomed to failServers are doomed to fail
Servers are doomed to failJ On The Beach
 
Interaction Protocols: It's all about good manners
Interaction Protocols: It's all about good mannersInteraction Protocols: It's all about good manners
Interaction Protocols: It's all about good mannersJ On The Beach
 
A race of two compilers: GraalVM JIT versus HotSpot JIT C2. Which one offers ...
A race of two compilers: GraalVM JIT versus HotSpot JIT C2. Which one offers ...A race of two compilers: GraalVM JIT versus HotSpot JIT C2. Which one offers ...
A race of two compilers: GraalVM JIT versus HotSpot JIT C2. Which one offers ...J On The Beach
 
Leadership at every level
Leadership at every levelLeadership at every level
Leadership at every levelJ On The Beach
 
Machine Learning: The Bare Math Behind Libraries
Machine Learning: The Bare Math Behind LibrariesMachine Learning: The Bare Math Behind Libraries
Machine Learning: The Bare Math Behind LibrariesJ On The Beach
 

Más de J On The Beach (20)

Massively scalable ETL in real world applications: the hard way
Massively scalable ETL in real world applications: the hard wayMassively scalable ETL in real world applications: the hard way
Massively scalable ETL in real world applications: the hard way
 
Big Data On Data You Don’t Have
Big Data On Data You Don’t HaveBig Data On Data You Don’t Have
Big Data On Data You Don’t Have
 
Acoustic Time Series in Industry 4.0: Improved Reliability and Cyber-Security...
Acoustic Time Series in Industry 4.0: Improved Reliability and Cyber-Security...Acoustic Time Series in Industry 4.0: Improved Reliability and Cyber-Security...
Acoustic Time Series in Industry 4.0: Improved Reliability and Cyber-Security...
 
Pushing it to the edge in IoT
Pushing it to the edge in IoTPushing it to the edge in IoT
Pushing it to the edge in IoT
 
Drinking from the firehose, with virtual streams and virtual actors
Drinking from the firehose, with virtual streams and virtual actorsDrinking from the firehose, with virtual streams and virtual actors
Drinking from the firehose, with virtual streams and virtual actors
 
How do we deploy? From Punched cards to Immutable server pattern
How do we deploy? From Punched cards to Immutable server patternHow do we deploy? From Punched cards to Immutable server pattern
How do we deploy? From Punched cards to Immutable server pattern
 
Java, Turbocharged
Java, TurbochargedJava, Turbocharged
Java, Turbocharged
 
When Cloud Native meets the Financial Sector
When Cloud Native meets the Financial SectorWhen Cloud Native meets the Financial Sector
When Cloud Native meets the Financial Sector
 
The big data Universe. Literally.
The big data Universe. Literally.The big data Universe. Literally.
The big data Universe. Literally.
 
Streaming to a New Jakarta EE
Streaming to a New Jakarta EEStreaming to a New Jakarta EE
Streaming to a New Jakarta EE
 
The TIPPSS Imperative for IoT - Ensuring Trust, Identity, Privacy, Protection...
The TIPPSS Imperative for IoT - Ensuring Trust, Identity, Privacy, Protection...The TIPPSS Imperative for IoT - Ensuring Trust, Identity, Privacy, Protection...
The TIPPSS Imperative for IoT - Ensuring Trust, Identity, Privacy, Protection...
 
Pushing AI to the Client with WebAssembly and Blazor
Pushing AI to the Client with WebAssembly and BlazorPushing AI to the Client with WebAssembly and Blazor
Pushing AI to the Client with WebAssembly and Blazor
 
Axon Server went RAFTing
Axon Server went RAFTingAxon Server went RAFTing
Axon Server went RAFTing
 
The Six Pitfalls of building a Microservices Architecture (and how to avoid t...
The Six Pitfalls of building a Microservices Architecture (and how to avoid t...The Six Pitfalls of building a Microservices Architecture (and how to avoid t...
The Six Pitfalls of building a Microservices Architecture (and how to avoid t...
 
Madaari : Ordering For The Monkeys
Madaari : Ordering For The MonkeysMadaari : Ordering For The Monkeys
Madaari : Ordering For The Monkeys
 
Servers are doomed to fail
Servers are doomed to failServers are doomed to fail
Servers are doomed to fail
 
Interaction Protocols: It's all about good manners
Interaction Protocols: It's all about good mannersInteraction Protocols: It's all about good manners
Interaction Protocols: It's all about good manners
 
A race of two compilers: GraalVM JIT versus HotSpot JIT C2. Which one offers ...
A race of two compilers: GraalVM JIT versus HotSpot JIT C2. Which one offers ...A race of two compilers: GraalVM JIT versus HotSpot JIT C2. Which one offers ...
A race of two compilers: GraalVM JIT versus HotSpot JIT C2. Which one offers ...
 
Leadership at every level
Leadership at every levelLeadership at every level
Leadership at every level
 
Machine Learning: The Bare Math Behind Libraries
Machine Learning: The Bare Math Behind LibrariesMachine Learning: The Bare Math Behind Libraries
Machine Learning: The Bare Math Behind Libraries
 

Último

Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROmotivationalword821
 

Último (20)

Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTRO
 

What to Expect from Java 9

  • 1. What to expect from Java 9? Ivan Krylov May 21, 2016 1 @JohnWings #J_OnTheBeach
  • 2. Why talking about it now? • Less then 1 year till scheduled release • Now is a good time to plan and prep for it • I am from Azul Systems - maker of compliant JDKs • Observing the process from aside, unbiased view on changes • All sources for this talk are public 2
  • 3. Java 9 and community 3
  • 5. 5 Subject: module-info.java just causes problems Date: Wed, 4 May 2016 13:33:06 -0500 From: David M. Lloyd <david.lloyd@redhat.com> To: jigsaw-dev <jigsaw-dev@openjdk.java.net> Tools like Maven and JUnit are yet still having a difficult time coping with the oddball module-info.java file. Can we just drop this thing and let the layer provide metadata for the module? This way of defining module metadata is clearly causing trouble. Reference: all previous arguments from non-Oracle people over the last 5 years or so. So far none of our software actually functions with Jigsaw, and the prospect is not improving. In the meantime the EG is alternately completely dead or in a state of we'll-register-your-issue-but-cannot-help-resolve-them mode. I'm highly concerned. Concerns
  • 6. 6 “There are only two kinds of languages: 
 the ones people complain about and the ones nobody uses.” Bjarne Stroustrup
  • 7. Java Timeline JDK 6
 Dec 2006 JDK 7
 July 2011 JDK 8
 March 2014 JDK 9
 exp. March 2017 JDK 6
 Nov 2012 JDK 7
 Apr 2015 JDK 8
 exp. Mar 2018 J2SE 1.4
 Dec 2006 JDK 5
 Oct 2009 7 GA EOL
  • 8. Java EOL & You? EOL date passed Security vulnerabilities keep appearing & Sign Support contact Adopt OpenJDK (Zulu, IcedTea, homebrew builds) Updated to latest JDK 8 Updates needed
  • 9. Java 9 schedule (tent.)Featurecomplete ZeroBugBounce Rampdownphase2 FinalReleaseCandidate May’16 Alltestsrun RampdownStart GeneralAvailability Aug’16 Sept’16 Oct’16 Dec’16 Jan’17 Mar’17 9
  • 10. What (was) new in Java 8 • Lambdas • Method references • Type annotations • Repeated annotations • Interface a.k.a. default methods 10 • Stream API • Date Time API • PermGen replacement (vendor specific) • Nashorn, JavaScript Engine • new tools (jdeps,jjs,..) http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html
  • 11. How new features become part of Java standard? 11
  • 16. Problems being addressed • Java Runtime keep getting bigger and bigger • Java 8 profiles 1, 2, 3 provide partial solutions • Jar / Classpath Hell • What depends on what .. • Optional dependancies, transitive dependancies • Lazy class loading and initialisation -> NoClassDefFoundError • For code that escapes packages the visibility mechanism is poor - only public • Classes from different packages “see” each other, even from different class loaders • SecurityManager helps to protect, but it is not on by default 16
  • 17. Jigsaw JEP 162: Prepare for Modularization JEP 200: The Modular JDK
 JEP 220: Modular Run-Time Images JEP 201: Modular Source Code JEP 260: Encapsulate Most Internal APIs JEP 282: jlink: The Java Linker
 JSR 376: Java Platform Module System JEP 261: Module System
 ModularityJava Module 17
  • 18. Example 1 s_module/module-info.java module s_module { exports services; } p_module/module-info.java module p_module { requires s_module; } s_module/services/LocProvider.java package services; import java.lang.String; public class LocProvider { public static String getLocation() { return "J on the beach 2016"; } } p_module/presentations/ModulesDemo.java package presentations; import services.LocProvider; public class ModulesDemo { public static void main(java.lang.String[] argv) { System.out.println("I am at “ + LocProvider.getLocation()); } } Module
 s_module Module p_module 18
  • 19. New params javac/java (1) • # Compile • >javac -d target -modulesourcepath . 
 s_module/services/LocProvider.java • >javac -d target -modulepath target -modulesourcepath . p_module/presentations/ModulesDemo.java • # Run • >java -mp target -m p_module/presentations.ModulesDemo 19
  • 20. New parameters for javac/java (2) 20 • # Packaging • jar --create --file=jars/s_module.jar -C target/ s_module . • jar --create --file=jars/p_module.jar --main- class=presentations/ModulesDemo -C target/p_module . • # Run • $j/bin/java -mp jars -m p_module Reference: http://openjdk.java.net/projects/jigsaw/quick-start
  • 21. Example 2./langtools/src/jdk.compiler/share/classes/module-info.java module jdk.compiler { requires public java.compiler; exports com.sun.source.doctree; exports com.sun.source.tree; exports com.sun.source.util; exports com.sun.tools.javac; exports com.sun.tools.doclint to jdk.javadoc; exports com.sun.tools.javac.api to jdk.javadoc, jdk.jshell; exports com.sun.tools.javac.code to jdk.javadoc, jdk.jshell; exports com.sun.tools.javac.comp to jdk.javadoc, jdk.jshell; exports com.sun.tools.javac.file to jdk.jdeps, jdk.javadoc; exports com.sun.tools.javac.jvm to jdk.javadoc; exports com.sun.tools.javac.main to jdk.javadoc; exports com.sun.tools.javac.model to jdk.javadoc; exports com.sun.tools.javac.parser to jdk.jshell; exports com.sun.tools.javac.platform to jdk.javadoc; exports com.sun.tools.javac.tree to jdk.javadoc, jdk.jshell; exports com.sun.tools.javac.util to jdk.jdeps, jdk.javadoc, jdk.jshell; uses javax.annotation.processing.Processor; uses com.sun.source.util.Plugin; uses com.sun.tools.javac.platform.PlatformProvider; provides com.sun.tools.javac.platform.PlatformProvider with com.sun.tools.javac.platform.JDKPlatformProvider; provides javax.tools.JavaCompiler with com.sun.tools.javac.api.JavacTool; } META-INF/services 21
  • 22. Can modularised & non-modularised
 code co-exist? • Whatever is in classpath - going into unnamed modules • Unnamed modules can access all named modules (requires *) /See next slide for a special note/ • The reverse isn’t true - must specify requires unnamed or … • jar file in -mp automatically being converted to a module with a name matching the name of the jar file • Therefore referred as automodules • Provide transition path to jigsaw modules design • Unnamed modules are being searched for types as a last option 22
  • 23. Unnamed modules can access all named modules • Not so true since JDK9 build 118 • These modules are not accessible from unnamed modules:
 java.activation - java.annotations.common - java.corba
 java.transaction - java.xml.bind - java.xml.ws • One can still add visibility with a flag like `-addmods java.corba` • Source: May 17th letter from Alan Bateman: http://mail.openjdk.java.net/ pipermail/jdk9-dev/2016-May/004309.html • More info: http://openjdk.java.net/jeps/261 23
  • 24. Types of modules • Named • i.e. containing module-info.class • Automatic • i.e. jar files placed to the module path • Unnamed • contains all types in the classpath 24
  • 25. 25 jdeps -genmoduleinfo cat /Users/ivan/test/modules/generated/glassfish.corba.omgapi/module-info.java module glassfish.corba.omgapi { requires public java.corba; requires public java.desktop; requires public java.rmi; exports com.sun.corba.ee.org.omg.CORBA; exports javax.rmi.CORBA; exports org.omg.CORBA; exports org.omg.CORBA.DynAnyPackage; exports org.omg.CORBA.ORBPackage; exports org.omg.CORBA.TSIdentificationPackage; exports org.omg.CORBA.TypeCodePackage; exports org.omg.CORBA.portable; exports org.omg.CORBA_2_3; exports org.omg.CORBA_2_3.portable; exports org.omg.CosNaming; exports org.omg.CosNaming.NamingContextExtPackage; exports org.omg.CosNaming.NamingContextPackage; exports org.omg.CosTSInteroperation; exports org.omg.CosTSPortability; exports org.omg.CosTransactions; exports org.omg.Dynamic; exports org.omg.DynamicAny; exports org.omg.DynamicAny.DynAnyFactoryPackage; exports org.omg.DynamicAny.DynAnyPackage; exports org.omg.IOP; exports org.omg.IOP.CodecFactoryPackage; exports org.omg.IOP.CodecPackage; exports org.omg.Messaging; exports org.omg.PortableInterceptor; exports org.omg.PortableInterceptor.ORBInitInfoPackage; exports org.omg.PortableServer; exports org.omg.PortableServer.CurrentPackage; exports org.omg.PortableServer.POAManagerPackage; exports org.omg.PortableServer.POAPackage; exports org.omg.SendingContext; exports org.omg.stub.java.rmi; } jdeps -genmoduleinfo ~/test/modules/generated/ 
 glassfish-4.1.1/glassfish/modules/ glassfish-corba-omgapi.jar
  • 26. 26 jdeps -jdkinternals glassfish-corba-orb.jar -> java.corba com.sun.corba.ee.impl.copyobject.OldReflectObjectCopierImpl (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.copyobject.OldReflectObjectCopierImpl$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.encoding.BufferManagerWriteStream (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.IIOPInputStream (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.IIOPInputStream$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.IIOPOutputStream (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.IIOPOutputStream$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.ObjectStreamClass (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.ObjectStreamClass$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.ObjectStreamField (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.ObjectStreamField$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl$1 (glassfish-corba-orb.jar) -> com.sun.jndi.cosnaming.CNCtx JDK internal API (java.corba) com.sun.corba.ee.impl.util.JDKClassLoader (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.util.JDKClassLoader$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) jdeps -jdkinternals glassfish/ modules/ glassfish-corba-orb.jar
  • 28. 28 • Consider an app with extensions • The extension might require a different version of a module than loaded before • The extension might require service providers • Layer of modules encapsulates • a module graph • mapping from each module in that graph to a class loader • Boot layer - created by vm at start time and suitable for most apps • App can create a new layer - new universe of modules • Stackable - package resolution starts with the app layer and goes down to the boot layer Layers
  • 29. Modularity Source: http://openjdk.java.net/projects/jigsaw/doc/jdk-modularization.html JDK 7 b65JDK 8 b48JDK9 EA 29 http://cr.openjdk.java.net/~mr/jigsaw/ea/module-summary.html
  • 30. More to discover 30 • Reflection. java.lang.reflect.Module class. • multirelease jar (Since b109. Bug 8132734) • Packages with the same name possibly leading to NoClassDefFoundException • Layers - new concept for classloaders • New instruments for modules development • <java9_jigsaw>/bin/jdeps -help • IDE are now supporting modules • Classloaders and ways for circular dependancies between modules
  • 31. Jigsaw - Unresolved issues http://openjdk.java.net/projects/jigsaw/spec/issues/ • Module declarations • #ModuleNameSyntax · #CompileTimeDependences · #ModuleAnnotations • Module artifacts • #MultiModuleExecutableJARs · #MultiModuleJARs · #ReifiedModuleGraphs • Module descriptors • #StandardModuleAttributes • Module graphs • #CyclicDependences • Reflection • #ClassFilesAsResources · #ResourceEncapsulation · #ReflectiveAccessToNonExportedTypes · #ReflectionWithoutReadability • Class loaders • #AvoidConcealedPackageConflicts · #PlatformClassLoader • Versioning • #StaticLayerConfiguration · #MultipleModuleVersions · #VersionsInModuleNames · #VersionedDependences 31
  • 32. (My) takeaways on Java 9 modules • Purpose - explicit listing of dependancies • OSGi compatible and complementary • Will provide new optimisation paths • Compatible with jar/cp • jigsaw - rough flight all way along, loosing features • lost ability to match versions 32
  • 33. Jigsaw - links • If you google it - discard all posts before 2014, probably even before 2015 too • State of Jigsaw (March 8 2015) • http://openjdk.java.net/projects/jigsaw/spec/sotms/ • JavaOne 2015 (also Devoxx BE) • http://openjdk.java.net/projects/jigsaw/j1/ • Code was integrated in JDK9 EA build 111 • See also: http://blog.codefx.org/java/dev/features-project-jigsaw-java-9/ • http://blog.codefx.org/java/dev/javaone-2015-under-the-hood-of-project-jigsaw/ 33
  • 34. Syntax changes - Milling Project Coin • Private default methods interface I { void a() { /*Common code*/ ; /*a’s specific code*/ } void b() { /*Common code*/ ; /*b’s specific code*/ } private void c() { /*Common code*/ ; } } 34 interface II { private void foo_private(String s); // Error: private method must declare body. private abstract void foo_abstract(int i, int j); // Error: private & abstract: bad combo void foo_decl(int x); // OK. private I foo_with_body() { return null; } // OK. }
  • 35. Syntax changes - Milling Project Coin • Effectively-final variables in try-with-resources expressions 35 public static void main(String... args) throws …{ FileReader f = new FileReader(“test.txt”); br =new BufferedReader(fr); try (br) { // do something } catch (Exception ex) { } } public static void main(String... args) throws …{ FileReader f = new FileReader(“test.txt"); try (br =new BufferedReader(fr)) { // do something } catch (Exception ex) { } }
  • 36. Syntax changes - Milling Project Coin • @SafeVarargs in private methods class VarargsFinalOnly { @SafeVarargs private void m(List<String>... args) { } } 36
  • 37. public class TypeInferrenceTest { Map<String, String> map = new HashMap<String, String>() { { map.put("key", "value"); } }; } • Using diamond with anonymous classes when actual type may be deduced public class TypeInferrenceTest { Map<String, String> map = new HashMap<> () { { map.put("key", "value"); } }; } Syntax changes - Milling Project Coin 37 Prior to Java 9 ./TypeInferrenceTest.java:7: error: cannot infer type arguments for HashMap<K,V> new HashMap<>() ^ reason: cannot use '<>' with anonymous inner classes where K,V are type-variables: K extends Object declared in class HashMap V extends Object declared in class HashMap 1 error http://c2.com/cgi/wiki?DoubleBraceInitialization
  • 38. Syntax changes - Milling Project Coin • Can’t use single _as a name 38 // key: compiler.warn.underscore.as.identifier // options: -source 8 -Xlint:-options class UnderscoreAsIdentifierWarning { String _ = null; }
  • 39. Process API Updates • JEP 102: Process API Updates • New: • Get pid for this JVM • Get list of processes • Operations on trees of processes
 Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ Process proc = Runtime.getRuntime() .exec(new String[]{"/bin/sh", "-c", "echo $PPID"}); if (proc.waitFor() == 0) { InputStream in = proc.getInputStream(); int available = in.available(); byte[] outputBytes = new byte[available]; n.read(outputBytes); String pid = new String(outputBytes); System.out.println("Your pid is " + pid); } System.out.println("Your pid is " + 
 ProcessHandle.current().getPid()); 39
  • 40. Spin Loop Hint • JEP 285: Spin-Wait Hints • Scope: latency & performance • Features: • New method j.l.Thread.onSpinWait() • Just a hint • on x86 - translates into 
 the ‘pause’ instruction class EventHandler { volatile boolean eventNotificationNotReceived; void waitForEventAndHandleIt() { while ( eventNotificationNotReceived ) { java.lang.Thread.onSpinWait(); } readAndProcessEvent(); } void readAndProcessEvent() { // Read event from some source and process it . . . } } 40
  • 42. Spin Loop Hint • Cool. I have spin loops. Wait for 9? • Just include the agrona library • or look at java/org/agrona/hints/ ThreadHints.java • Works for older JDKs 42 https://github.com/real-logic/Agrona/blob/master/src/main/java/org/agrona/hints/ThreadHints.java
  • 43. JShell • Project `Kulla • http://openjdk.java.net/projects/kulla/ • In main trunk since JDK 9 EA build 90 • REPL as you know it for other languages • Helps teaching Java class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } 43
  • 45. JShell - examples • > ./images/jdk/bin/jshell • -> String s=new String("hello"); • | Added variable s of type String with initial value “hello” • -> new String("hello"); • | Expression value is: "hello" • | assigned to temporary variable $1 of type String • -> System.out.println($1); • h • -> ello • -> System.out.println(“hello”); System.out.flush(); • hello 45
  • 46. Garbage First is on by default • Pros • State-of-the-art GC in HotSpot (albeit being 10+ years old) • Regional parallel concurrent collector • Targeting both low pause and high throughput • Default => Great number of users => Bugs detecter sooner => G1 will become even more robust shortly • Cons • Due to different characteristics it may reveal synchronisation problems in the code • Eve after 9 years G1 has bugs with Cassandra, Elasticsearch, Lucene, perhaps, other ones are yet not discovered? • source (dated July 2015): https://groups.google.com/forum/#!topic/mechanical-sympathy/ JxsuVtIIOaY 46
  • 47. Surviving the change of default GC • If you used no i.e. default GC settings • capture the ergonomics at your deployment sites • consider explicitly setting GC flags in all deployment scripts • If you already had selected and tuned GC flags • No changes, old collectors not phasing out • In any case - keep trying G1 • Understand how GC works • Basic algorithms and associated metrics • More reading: http://www.infoq.com/minibooks/java-garbage-collection 47
  • 48. New JEPs briefly. Performance • 193: Variable Handles • 143: Improve Contended Locking • 266: More Concurrency Updates • 197: Segmented Code Cache • 165: Compiler Control • 243: Java-Level JVM Compiler Interface • 246: Leverage CPU Instructions for GHASH and RSA • 250: Store Interned Strings in CDS Archives • 254: Compact Strings • JEP 280: Indify String Concatenation • 230: Microbenchmark Suite 48
  • 49. 49 Unified JVM Logging • For better diagnostics, uniform across all components • 6 levels of logging x dozens of tags • Output to stdout / stderr / file / rotating file • No more badly interleaved lines • -Xlog:help • 11 decorators -Xlog:classinit -Xlog:classloaderdata -Xlog:defaultmethods -Xlog:itables -Xlog:monitormismatch -Xlog:safepoint -Xlog:startuptime -Xlog:vmoperation -Xlog:vtables -Xlog:verification -XX:+TraceClassInitialization -XX:+TraceClassLoaderData -XX:+TraceDefaultMethods -XX:+TraceItables -XX:+TraceMonitorMismatch -XX:+TraceSafepoint -XX:+TraceStartupTime -XX:+TraceVMOperation -XX:+PrintVtables -XX:+VerboseVerification
  • 50. 50 JEP 223: New Version-String Scheme • System Property Existing Proposed • ------------------------------- ------------ -------- • Early Access • java.version 1.9.0-ea 9-ea • java.runtime.version 1.9.0-ea-b73 9-ea+73 • java.vm.version 1.9.0-ea-b73 9-ea+73 • java.specification.version 1.9 9 • java.vm.specification.version 1.9 9 • Major (GA) • java.version 1.9.0 9 • java.runtime.version 1.9.0-b100 9+100 • java.vm.version 1.9.0-b100 9+100 • java.specification.version 1.9 9 • java.vm.specification.version 1.9 9 • Minor #1 (GA) • java.version 1.9.0_20 9.1.2 • java.runtime.version 1.9.0_20-b62 9.1.2+62 • java.vm.version 1.9.0_20-b62 9.1.2+62 • java.specification.version 1.9 9 • java.vm.specification.version 1.9 9 • Security #1 (GA) • java.version 1.9.0_5 9.0.1 • java.runtime.version 1.9.0_5-b20 9.0.1+20 • java.vm.version 1.9.0_5-b20 9.0.1+20 • java.specification.version 1.9 9
  • 51. New JEPs briefly. What’s going away? • 231: Remove Launch-Time JRE Version Selection • 240: Remove the JVM TI hprof Agent • 241: Remove the jhat Tool
 
 ——————————— • Because of modules (JEP - 261) • -Xbootclasspath & -Xbootclasspath/p • system property sun.boot.class.path 51
  • 52. New JEPs briefly. Client/graphics • 258: HarfBuzz Font-Layout Engine • 263: HiDPI Graphics on Windows and Linux • 265: Marlin Graphics Renderer • 262: TIFF Image I/O • 257: Update JavaFX/Media to Newer Version of GStreamer (1.4.4) • 251: Multi-Resolution Images 52
  • 53. New JEPs briefly. Security • 219: Datagram Transport Layer Security (DTLS) • 229: Create PKCS12 Keystores by Default • 244: TLS Application-Layer Protocol Negotiation Extension • 249: OCSP Stapling for TLS 53
  • 54. Azul Systems • Zing: A better JVM for the enterprise • Azul’s innovative Java runtime for business applications • Certified Java SE builds • Removes GC as a factor in your operation • Supports large in-memory data stores • Solves Java’s “warm-up” problem • Runs on distros of RHEL, Ubuntu, SLES and CentOS
 
 •Zulu: Java when all you need is Support • Free and Open Source (based on OpenJDK) • Certified Java SE builds • Runs on Windows, Linux & Mac • Performance parity with Oracle Hotspot • Optional customized “embedded” offerings 54
  • 55. Unicode in Java 9 • 227: Unicode 7.0… • … & 267: Unicode 8.0 55
  • 58. 58 Backup on @SafeVarargs @SafeVarargs // Not actually safe! static void m(List<String>... stringLists) { Object[] array = stringLists; List<Integer> tmpList = Arrays.asList(42); array[0] = tmpList; // Semantically invalid, but compiles without warnings String s = stringLists[0].get(0); // Oh no, ClassCastException at runtime! }