how to decrease your application footprint java module system · docker awareness jdk-8146115...
TRANSCRIPT
Java Module SystemHow to decrease your application footprint
Leonardo Zanivan - CrossoverRodrigo Cândido da Silva - Integritas
Java
9 M
odul
es S
yste
m
Previous Module System Classpath
After Module System ClasspathJD
K 9
+
Sprin
g Mo
du
les
jlink
exec
● Spring Boot 2 sample application with REST MVC & JPA
1. Create module-info.java with all the required imports
2. Update third party libs with JDK 9/10 fixes
3. Add new Maven plugin to copy dependencies
4. No Java code change was required
Migrating Spring PetClinic to Java 9 Modules
● Application can still run with explicit classpath after migration
● Use --upgrade-module-path to override problematic modules
● You will find that third party libs are not ready to use modules
Lessons Learned
● Automatic modules can cause issues (naming conflicts, JLink)
○ e.g: JLink was used to create a minimal JRE manually
● Third party libs may require you to open some packages
○ e.g: Hibernate JPA, Spring
● Hello World always work!
Lessons Learned
JDK 10 Highlights
Docker awareness
JDK-8146115 enhancement JDK-8186309 enhancementJDK-8179498 enhancement
Can extract container-specific
information about number of CPUs (automatically)
Can extract container-specific information about allocated memory
(automatically)
Attaching to namespace issue(s) have been resolved!
host PID ⇒ container PID
New JVM flags for Docker support:-XX:UseContainerSupport (default)-XX:ActiveProcessorCount-XX:InitialRAMPercentage-XX:MaxRAMPercentage-XX:MinRAMPercentage
Support for Linux only
JDK 10 Highlights
Reduce resource footprint when
multiple JVMs were running on the same
physical machine
JEP 310: Application Class-Data
Sharing
Pre-Java 10, use of CDS had been restricted to the
bootstrap class loader only
Improve startup time
of application Processes/applications can sharing common class metadata
(class-data), from a shared archive (CDS archive)
● java.xml.ws (JAX-WS)
● java.xml.bind (JAXB)
● java.activation (JAF)
● java.xml.ws.annotation (JSR 250)
● java.corba (CORBA)
● java.transaction (JTA)
● java.se.ee (Aggregator module)
● jdk.xml.ws (Tools for JAX-WS)
● jdk.xml.bind (Tools for JAXB)
JDK 11 Changes
JEP 320: Remove Java EE
and CORBA Modules
Eclipse OpenJ9
● TL;DR; 2x smaller memory
footprint and starts 2x faster
than HotSpot.
● Experimental; AdoptOpenJDK
builds are available.
https://adoptopenjdk.net
github.com/panga/qcon2018-java9modules
Note: JDK 10 Alpine was built from source: https://hub.docker.com/r/panga/openjdk10/
JDK 10 Minimal JRE + Module Application < 100mb
Note: Best case scenario during my tests.Limit: 2 cpus, 1g memory, JVM_OPTS= Xmx512m
JDK 10 Modules starts 2x faster on Docker
Note: Best case scenario during my tests.JMeter test plan was used to load application.
JDK 10 Modules has 2x lower footprint on Startup!
JDK 10 Modules has 2x lower footprint after Load!
Note: Best case scenario during my tests.JMeter test plan was used to load application.
github.com/panga/spring-petclinic-java9modules