jdk-9: modules and java linker
Post on 21-Apr-2017
199 Views
Preview:
TRANSCRIPT
JDK-9 Modules and Java Linker (JLink)
G. Bhanu Prakash
Java Platform Team
Oracle India Private Limited
bhanu.prakash.gopularam@oracle.com
8/30/2016 1 Copyright 2016, Oracle and/or it's affiliates. All rights reserved
Agenda 1. Modules
2. Module Dependencies
3. Jlink and Packaging
4. Jlink Plugins
5. Example Plugins 1. System Module Descriptor Plugin
2. Compress Plugin
3. Release-Info Plugin
8/30/2016 2 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
SAFE HARBOR STATEMENT
The following is intended to outline our general product direction. It is intended for information purpose only, and may not be incorporated in any contract. It is not a commitment to deliver any material, code, or
functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or
functionality described for Oracle’s products remains at the sole discretion of Oracle
8/30/2016 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved 3
Jigsaw Problems Problems
Platform scalability (small devices)
Jar Hell or Classpath Hell
• Java runtime crashes with NoClassDefFoundError
• Shadowing of classes
Performance
• Startup
• Download
8/30/2016 4 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
Jigsaw Solutions Problems
Platform scalability
• Modularize JDK
Jar Hell or Classpath Hell
• Replace classpath with module dependencies
Performance
• Startup – install optimizations in module library
• Download - incremental modules in demand
8/30/2016 5 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
• What is Module
• Module-Info.java – Visibility Rules
• REQUIRES
• EXPORTS
• REQUIRES PUBLIC
8/30/2016 6 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
Modules
8/30/2016 7 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
“public” no longer means “accessible”
Modules
com.foo.app module-info.java module com.foo.app { requires com.foo.bar; requires java.sql; }
8/30/2016 8 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
Example: com.foo.app
Modules Example
com.foo.bar module com.foo.app { exports com.foo.bar; }
Actual Module Dependencies (com.foo.app)
8/30/2016 9 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
8/30/2016 10 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
Transitive Dependencies (com.foo.app)
JDK Platform Modules
8/30/2016 11 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
How to compile modules
Inputs Jmods, Modular jar files
Exploded modules
1. Compile com.foo.bar (base)
javac -d mods\com.foo.bar
src\com.foo.bar\module-info.java
src\com.foo.bar\com\foo\bar\*.java
2. Compile com.foo.app (main application)
javac -modulepath mods
-d mods\com.foo.app
src\com.foo.app\module-info.java
src\com.foo.app\com\foo\app\*.java
Or
javac –modulesourcepath src –d mods …
8/30/2016 12
Copyright 2016, Oracle and/or it's affiliates. All rights reserved
Create Modules
Create module com.foo.bar
jmod create
--class-path mods\com.foo.bar
com.foo.bar
Create module com.foo.app jmod create
--class-path mods\com.foo.app
com.foo.app
8/30/2016 13 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
Module Information
• jmod describe com.foo.bar com.foo.bar
requires mandated java.base
exports com.foo.bar
• jmod describe com.foo.app com.foo.app
requires com.foo.bar
requires mandated java.base
requires java.sql
conceals com.foo.app
8/30/2016 14 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
8/30/2016 15 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
Linking
8/30/2016 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved 16
Jlink and Packaging (JEP-282)
Brief History Jrecreate was introduced in Java 8 with EJDK (JavaSE Embedded)
Instead of binaries we ship the EJDK
Jlink Usage: Command line tool to link module modules into jimage file
generate runtime images
JEP-282: “Link time is an opportunity to do whole-world optimizations that are otherwise difficult at compile or costly at runtime”
8/30/2016 17
Copyright 2016, Oracle and/or it's affiliates. All rights reserved
Jlink Packaging
8/30/2016 18 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
Legacy JDK image
JDK-9 Generated Image
Jlink Packaging
Create image file
jlink --output myimage
--addmods com.foo.app
--modulepath jdk-9b131\jmods;mods
>ls myimage
bin lib conf release
8/30/2016 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved 19
App execution from Generated image
>myimage\bin\java -listmods
com.foo.app
com.foo.bar
java.base@9-ea
java.logging@9-ea
java.sql@9-ea
java.xml@9-ea
>java -m com.greetings/com.greetings.Main
Output: Greetings (com.foo.app.Main) : World (from com.foo.bar)
>java -m com.foo.app/com.foo.app.App2
Output: Exception:oracle.jdbc.driver.OracleDriver
8/30/2016 20 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
-modulepath mods Not required
Jlink Plugins
Image customization enabled using a set of predefined plugins
12 builtin plugins. Example: compress-resources
release-info
sort-resources
exclude-files
gen-installed-modules
replace-file
Programmatic access to jlink features
As per the JEP, the plugin API is strictly experimental
8/30/2016 21
Copyright 2016, Oracle and/or it's affiliates. All rights reserved
8/30/2016 22 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
Plugins and Image creation - WorkFlow
Optimizing Java startup Problem: Significant time spent parsing and validating
module-info.class for each module in system image itself
Solution: Implement jlink plugin to generate a pre-
validated system module graph
SystemModuleDescriptorPlugin
8/30/2016 23 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
--installed-modules Startup time
Disabled 510 ms
Enabled 220 ms
• Reduces memory use by a sizable amount
• This plugin is ON by default (--installed-modules on)
8/30/2016 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved 24
Compress Plugin
LEVEL_0
StringSharingPlugin - Scans image classes constant pool (UTF-8 Strings)
LEVEL_1:
ZipPlugin(resFilter) - Zip compression of image classes
LEVEL_2:
StringSharingPlugin(resFilter)
ZipPlugin(resFilter)
8/30/2016 25 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
Compression level
Size (~)
None 28.5 MB
LEVEL_0 17.3 MB
LEVEL_1 11.7 MB
LEVEL_2 11.5 MB
Table: Jlink generated image size
Release-info Plugin
Normal JDK myimage>cat release
#Wed Aug 24 09:19:38 IST 2016 MODULES=java.sql,com.foo.bar,com.foo.app,java.logging,java.xml,java.base OS_VERSION=5.2 OS_ARCH=amd64 OS_NAME=Windows JAVA_VERSION=9-ea
With Release Plugin: jlink --release-info
add:build_type=fastdebug,source=oraclejdk,java_version=9+101 …
myimage2>cat release #Wed Aug 24 09:32:36 IST 2016 MODULES=java.sql,com.foo.bar,com.foo.app,java.logging,java.xml,java.base OS_VERSION=5.2 OS_ARCH=amd64 OS_NAME=Windows JAVA_VERSION=9-ea
build_type=fastdebug,source\=oraclejdk,java_version\=9+101
8/30/2016 26 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
Summary
• Accessibility is enforced by the compiler, VM, and Core Reflection
• Freedom to adopt modules at your own pace – Modularize the application
– Modularize the libraries
• Some libraries may require more changes to work as modules
8/30/2016 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved 27
More Information
OpenJDK Project Jigsaw page
http://openjdk.java.net/project/jigsaw
mailto: jigsaw-dev@openjdk.java.net
Module Usage at Compile Time slides http://openjdk.java.net/projects/jigsaw/doc/ModulesAndJavac.pdf
Javadoc for Java Module java APIs:
http://cr.openjdk.java.net/~mr/jigsaw/api/
Modules in the Java Language and VM http://openjdk.java.net/projects/jigsaw/doc/lang-vm.html
8/30/2016 28 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved
Thank You. Questions?
8/30/2016 Copyright 2016, Oracle and/or it's affiliates.
All rights reserved 29
top related