Java Module System How to decrease your application footprint - - PowerPoint PPT Presentation

java module system
SMART_READER_LITE
LIVE PREVIEW

Java Module System How to decrease your application footprint - - PowerPoint PPT Presentation

Java Module System How to decrease your application footprint Leonardo Zanivan - Crossover Rodrigo Cndido da Silva - Integritas Java 9 Modules System Previous Module System Classpath After Module System Classpath JDK 9+ Spring Modules jlink


slide-1
SLIDE 1

Java Module System

How to decrease your application footprint

Leonardo Zanivan - Crossover Rodrigo Cândido da Silva - Integritas

slide-2
SLIDE 2
slide-3
SLIDE 3

Java 9 Modules System

slide-4
SLIDE 4
slide-5
SLIDE 5

Previous Module System Classpath

slide-6
SLIDE 6

After Module System Classpath

JDK 9+

slide-7
SLIDE 7
slide-8
SLIDE 8
slide-9
SLIDE 9

Spring Modules

slide-10
SLIDE 10
slide-11
SLIDE 11

jlink exec

slide-12
SLIDE 12
  • 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

slide-13
SLIDE 13
  • 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

slide-14
SLIDE 14
  • 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

slide-15
SLIDE 15

JDK 10 Highlights

Docker awareness

JDK-8146115 enhancement JDK-8186309 enhancement JDK-8179498 enhancement

Can extract container-specific information about number

  • f 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

slide-16
SLIDE 16

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

  • f application

Processes/applications can sharing common class metadata (class-data), from a shared archive (CDS archive)

slide-17
SLIDE 17
  • 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

slide-18
SLIDE 18

Eclipse OpenJ9

  • TL;DR; 2x smaller memory

footprint and starts 2x faster than HotSpot.

  • Experimental; AdoptOpenJDK

builds are available. https://adoptopenjdk.net

slide-19
SLIDE 19

github.com/panga/qcon2018-java9modules

slide-20
SLIDE 20

Note: JDK 10 Alpine was built from source: https://hub.docker.com/r/panga/openjdk10/

JDK 10 Minimal JRE + Module Application < 100mb

slide-21
SLIDE 21

Note: Best case scenario during my tests. Limit: 2 cpus, 1g memory, JVM_OPTS= Xmx512m

JDK 10 Modules starts 2x faster on Docker

slide-22
SLIDE 22

Note: Best case scenario during my tests. JMeter test plan was used to load application.

JDK 10 Modules has 2x lower footprint on Startup!

slide-23
SLIDE 23

JDK 10 Modules has 2x lower footprint after Load!

Note: Best case scenario during my tests. JMeter test plan was used to load application.

slide-24
SLIDE 24

github.com/panga/spring-petclinic-java9modules

slide-25
SLIDE 25

@leonardopanga @rcandidosilva http://jav.mn/java10