java 9 performance - jpinpoint.comjava 9 performance by jeroen borgers. contents - part i...
TRANSCRIPT
![Page 1: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/1.jpg)
Java 9 PerformanceBy Jeroen Borgers
![Page 2: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/2.jpg)
Contents - part I•Introduction •How will life change with JDK9? •Jigsaw goals •Platform modules & performance •JDK8 versus JDK9-modular Java •Inside modules: jimage, jdeps •mods & modular jars •link-time: jlink •link-time optimizations
![Page 3: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/3.jpg)
Contents - part II•Compiler improvements & API •Improved locking •Variable handles •Diagnostics •Garbage collector •Compact Strings •Immutable collections •Stack walking API •Summary and Conclusions •Questions
![Page 4: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/4.jpg)
Introduction
• Java 8 introduced lambda’s and (parallel) streams
• Java 9 introduces Jigsaw
• Will life change with Java 9?
• What about performance?
![Page 5: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/5.jpg)
Schedule
• 2015/05/06 Feature Complete
• 2016/08/11 All Tests Run
• 2016/09/01 Rampdown Start
• 2016/10/20 Zero Bug Bounce
• 2016/12/01 Rampdown Phase 2
• 2017/01/26 Final Release Candidate
• 2017/03/23 General Availability
![Page 6: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/6.jpg)
Schedule
• 2015/05/06 Feature Complete
• 2016/08/11 All Tests Run
• 2016/09/01 Rampdown Start
• 2016/10/20 Zero Bug Bounce
• 2016/12/01 Rampdown Phase 2
• 2017/01/26 Final Release Candidate
• 2017/03/23 General Availability
![Page 7: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/7.jpg)
Schedule
• Now: EA jigsaw-b111 (2016-03-24)
• 2015/05/06 Feature Complete
• 2016/08/11 All Tests Run
• 2016/09/01 Rampdown Start
• 2016/10/20 Zero Bug Bounce
• 2016/12/01 Rampdown Phase 2
• 2017/01/26 Final Release Candidate
• 2017/03/23 General Availability
![Page 8: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/8.jpg)
How will life change?• No more rt.jar, tools.jar in Java runtime
• Tools like IntelliJ and Eclipse currently rely on it and will not run
• Modules instead: added logical layer
• Accessible at runtime via URL:
• jrt:/java.base/java/lang/String.class
• Unrecognized VM options
• Deprecated in JDK 8, removed now: -XX:MaxPermSize
![Page 9: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/9.jpg)
How will life change? -2• Several Java API’s not accessible anymore
• internal, unsupported and not portable: sun.*, com.sun.*, java.awt.peer
• jdeps from Java 8/9 helps to find static dependencies
• G1 is default collector
• ‘_’ no longer allowed as identifier by itself
• private interface methods (instance and static)
• No more support for java -source and -target < 1.6
![Page 10: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/10.jpg)
How will life change? -3• Javadoc search
• Factory methods for small immutable collections
• Stack walking API
• Concurrency updates for reactive programming
• Unified GC logging
• Optimize String concatenation
![Page 11: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/11.jpg)
Project Jigsaw goals
![Page 12: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/12.jpg)
Project Jigsaw goals• Make platform&JDK more easily scalable down to
small computing devices;
• Improve security and maintainability
• Enable improved application performance; and
• Make it easier for developers to construct and maintain libraries and large applications.
![Page 13: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/13.jpg)
Platform Module System, JSR 376 - Improved performance
• Platform, library, and application components are put in one runtime and dependencies are known
• Ahead-Of-Time and Whole-Program optimizations are more effective
![Page 14: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/14.jpg)
Modules enable optimizations• Known where code will be used, optimizations more feasible;
• JVM-specific memory images that load faster than class files;
• Fast lookup of both JDK and application classes;
• early bytecode verification;
• ahead-of-time (AOT) compilation of method bodies to native code;
• the removal of unused fields, methods, and classes; and
• aggressive inlining of, e.g., lambda expressions.
![Page 15: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/15.jpg)
Side step: inliningString wrap(String a, String b) { return b + a + b; }
String getPersonText(String wrapper) {
StringBuilder persons = new StringBuilder();
persons.append(wrap(“Brian”, wrapper));
persons.append(wrap(“John”, wrapper));
return persons.toString();
}
• Dependent on size of method
• default <= 35 bytes of byte code
• 325 bytes for hot methods
![Page 16: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/16.jpg)
Side step: inliningString wrap(String a, String b) { return b + a + b; }
String getPersonText(String wrapper) {
StringBuilder persons = new StringBuilder();
persons.append(wrap(“Brian”, wrapper));
persons.append(wrap(“John”, wrapper));
return persons.toString();
}
After inlining:
String getPersonText(String wrapper) {
StringBuilder persons = new StringBuilder();
persons.append(wrapper).append(“Brian”).append(wrapper));
persons.append(wrapper).append(“John”).append(wrapper));
return persons.toString();
}
![Page 17: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/17.jpg)
Startup Performance• Current JVM startup:
• class loading slow: executes a linear scan of all JARs on classpath
• Annotation detection requires to read all classes in package(s)
• Spring: <context:component-scan base-package="your.package.name" />
• Modules will provide a fast class-lookup, including by annotation, without reading all class files
• Indexes created when the module is compiled
![Page 18: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/18.jpg)
JDK 8
![Page 19: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/19.jpg)
Modular Java - JEP 220: Modular Run-Time Images
![Page 20: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/20.jpg)
Modular Java - JEP 220: Modular Run-Time Images
![Page 21: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/21.jpg)
Modular Java - JEP 220: Modular Run-Time Images
![Page 22: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/22.jpg)
JDK Module Graph
![Page 23: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/23.jpg)
JDK Module Graph
![Page 24: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/24.jpg)
inside the modules file - jimage tool
• Demo
![Page 25: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/25.jpg)
jimage tool
![Page 26: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/26.jpg)
jimage tool
![Page 27: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/27.jpg)
jimage tool
![Page 28: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/28.jpg)
jdeps tool
![Page 29: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/29.jpg)
jdeps tool
![Page 30: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/30.jpg)
jdeps tool
![Page 31: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/31.jpg)
Packaging: JMOD files
![Page 32: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/32.jpg)
jmod = jar++ for compile and link time
![Page 33: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/33.jpg)
mods of project
![Page 34: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/34.jpg)
mods of project
![Page 35: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/35.jpg)
packaging: modular jars
![Page 36: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/36.jpg)
jlink
• Small size output image:
• 70 MB with native debug files
• 21 MB without, can be 12 MB
![Page 37: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/37.jpg)
jlink• Produces a custom modular run-time image
![Page 38: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/38.jpg)
jlink• Produces a custom modular run-time image
![Page 39: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/39.jpg)
inside the run-time image
![Page 40: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/40.jpg)
inside the run-time image
![Page 41: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/41.jpg)
jlink - to assemble and optimize
• link-time: optional phase between javac and java
• assemble and optimize a set of modules
• and their transitive dependencies
• creates a run-time image or executable
• apply whole-world optimizations
• otherwise difficult at javac time or costly at java time
![Page 42: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/42.jpg)
jlink plugins • compress
• strip-debug
• installed-modules
• fast loading of module descriptors
• class-optim=<all|forName-folding>[:log=<log file>]
• experimental
![Page 43: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/43.jpg)
Dynamic class loading
![Page 44: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/44.jpg)
Static class loading
![Page 45: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/45.jpg)
![Page 46: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/46.jpg)
![Page 47: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/47.jpg)
Contents - part I - wrap up•Introduction •How will life change with JDK9? •Jigsaw goals •Platform modules & performance •JDK8 versus JDK9-modular Java •Inside modules: jimage, jdeps •mods & modular jars •link-time: jlink •link-time optimizations
![Page 48: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/48.jpg)
Contents - part II•Compiler improvements & API •Improved locking •Variable handles •Diagnostics •Garbage collector •Compact Strings •Immutable collections •Stack walking API •Summary and Conclusions •Questions
![Page 49: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/49.jpg)
Compiler improvements• JEP 165: Compiler Control
• method specific flags, file: inline:["+java.util.*", "-com.sun.*"]
• runtime manageable: jcmd <pid> Compiler.add_directives <file>
• JEP 199: Smart Java Compilation
• sjavac: smart wrapper around javac
• incremental compiles - recompile only what's necessary
• parallel compilation - utilize cores during compilation
• keep compiler in hot VM - reuse JIT'ed javac instance for consecutive invocations
![Page 50: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/50.jpg)
Compiler API - JEP 243• Allow Java code to observe, query, and affect
JVM's compilation
• Pluggable JIT compiler architecture
• Graal
• May persist code profile and reuse it AOT, avoid JVM warm-up
• Like Azul’s ReadyNow!
![Page 51: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/51.jpg)
JEP 143: Improve contended locking
• 22 many-threads benchmarks
• Field reordering and cache line alignment
• Fast Java monitor enter and exit operations
• Fast Java monitor notify/notifyAll operations
![Page 52: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/52.jpg)
JEP 193: Variable handles• Typed reference to a variable
• Atomicity for object fields, array elements and ByteBuffers
• like java.util.concurrent.atomic, sun.misc.Unsafe operations
• java.lang.invoke.VarHandle, next to MethodHandle from Java7
• java.util.concurrent will move from use of Unsafe to VarHandles
• VH will use Unsafe internally
• What is that Unsafe class? In thread stacks I see: Unsafe.park
![Page 53: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/53.jpg)
By: @arturotena
![Page 55: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/55.jpg)
Side step: sun.misc.Unsafe• Better alternative to native C or assembly code via JNI
• Atomic compare-and-swap operations like in AtomicInteger, ConcurrentHashMap
public final native boolean compareAndSwapInt(Object o, long offset, int expected, int x)
• Direct access to native, off-heap memory
public native long allocateMemory(long bytes); //quite unsafe!
• Creating objects without calling constructor like in Serialization
• High performance; special handling by JVM
• methods are intrinsified: assembler instruction inlined to caller, no JNI-call overhead
![Page 56: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/56.jpg)
Side step: sun.misc.Unsafe• Access to Unsafe is restricted to JDK classes however
• Can be worked around by reflection
• Java 9 puts Unsafe in jdk internal module
• Safe and updated alternatives come available: VarHandles
• Libs currently using Unsafe: Netty, Hazelcast, Kryo, Cassandra, Spring, Akka, ..
• command line flag makes Unsafe readable for transition period
![Page 57: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/57.jpg)
JEP 193: Variable handles• Use case:
class Position {
private volatile int x = 0;
public void walkRight() {
x++;
}
}
• Is it thread safe?
![Page 58: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/58.jpg)
JEP 193: Variable handles• Use case:
class Position {
private volatile int x = 0;
public void walkRight() {
x++;
}
}
• Not thread-safe because x++ is in fact two operations:
int tmp = this.x;
this.x = tmp + 1;
• Other thread may walkRight in between these two and have his result lost
![Page 59: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/59.jpg)
JEP 193: Variable handles• Solution:
class Position {
private AtomicInteger x = new AtomicInteger();
public void walkRight() {
x.incrementAndGet();
}
}
• memory usage compared to previous?
![Page 60: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/60.jpg)
JEP 193: Variable handlesclass Pos {
private int x = 0;
public void walkRight() {
x = VH_POS_X.addAndGet(this, 1);
}
}
![Page 61: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/61.jpg)
JEP 193: Variable handlesclass Pos {
private static final VarHandle VH_POS_X;
private int x = 0;
static {
try {
VH_POS_X = MethodHandles.lookup().
in(Pos.class).findFieldVarHandle(Pos.class, "x", int.class);
} catch (Exception e) { throw new Error(e); }
}
public void walkRight() {
VH_POS_X.addAndGet(this, 1);
}
}
![Page 62: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/62.jpg)
More diagnostic commandsJeroens-MacBook-Pro-2:Home jeroen$ jcmd 31142 VM.class_hierarchy 31142: java.lang.Object/null |--java.lang.reflect.Proxy$ProxyBuilder$$Lambda$122/123322386/null |--jdk.internal.jimage.ImageBufferCache/null |--org.netbeans.core.windows.view.ModeAccessor/0x00007faf026d8730 (intf) |—java.lang.invoke.LambdaForm$DMH/1841321848/null
Jeroens-MacBook-Pro-2:Home jeroen$ jcmd 31142 VM.stringtable \31142: StringTable statistics: Number of buckets : 60013 = 480104 bytes, avg 8.000 Number of entries : 17882 = 429168 bytes, avg 24.000 Number of literals : 17882 = 1604736 bytes, avg 89.740 Total footprint : = 2514008 bytes Average bucket size : 0.298 Variance of bucket size : 0.299 Std. dev. of bucket size: 0.547 Maximum bucket size : 4
• Compiler.queue .codelist, .codecache • VM.set_flag
![Page 63: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/63.jpg)
G1 as default collector• G1 default on 32 and 64 bit server configs
• Replaces Parallel GC as default
• Parallel GC shows long pauses for large heaps
• JDK8_u40 / JEP 156: G1 now supports class unloading instead of needing a full GC
• Optimizes for low pause time
• Not for throughput nor CPU load!
• May need more tuning
• -XX:MaxGCPauseMillis=n
![Page 64: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/64.jpg)
Compact Strings• Improve space efficiency of String, StringBuilder, etc.
• String is often biggest consumer of the heap
• Characters are UTF-16: 2 bytes, while most apps use only Latin-1: 1 byte
• New: byte[] or char[], + encoding flag field
• Less allocation, less GC, less data on bus: so also better time efficiency!
• SPECjbb2005 server app benchmark:
• 21% less live data
• GC: 21% less frequent, 17% less long
• 10% better app throughput
![Page 65: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/65.jpg)
private methods on interfaces
![Page 66: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/66.jpg)
Factory methods for small immutable collections
![Page 67: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/67.jpg)
Stack-walking API• Throwable::getStackTrace and Thread::getStackTrace return all
StackTraceElement[] containing class name + method name
• expensive
• sun.reflect.Reflection::getCallerClass is fast, only JDK-internal
• replacement needed
![Page 68: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/68.jpg)
Java 9 Performance Summary and Conclusions
• Modules: big incompatible change of JDK 9
• Performance optimizations introduced and enabled
• link-time provides new possibilities for whole-world optimizations
• class loading, startup time, more aggressive optimizations
• Internal, fast Unsafe features made available with VarHandles
• Innovation on compilers front
• Faster javac, more control, pluggable JIT, AOT
• Faster dealing with more data and threads
• G1, compact strings, contention, immutable collections, stack walking
![Page 69: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/69.jpg)
Java 9 Performance Questions?
![Page 70: Java 9 Performance - jpinpoint.comJava 9 Performance By Jeroen Borgers. Contents - part I •Introduction ... •Garbage collector •Compact Strings •Immutable collections •Stack](https://reader036.vdocuments.mx/reader036/viewer/2022062603/5f0f61c97e708231d443e1c0/html5/thumbnails/70.jpg)
Want to learn more?•www.jpinpoint.com / www.profactive.com • references, presentations
•Accelerating Java Applications •3 days technical training. June 20-22, 2016 • Info/subscribe: http://www.jpinpoint.com/training-accelerate.html
•Performance oriented Java coding (NEW) •1 day developer workshop. October 11, 2016 • Info/subscribe: [email protected]
•For both use code: ‘ISENSE2016’ for 10% discount.