Java SE 9 modules (JPMS) - an introduction

Stephen Colebourne
Stephen ColebourneEngineering Lead at OpenGamma
Java SE 9 modules
An introduction
Stephen Colebourne - @jodastephen
Engineering Lead, OpenGamma
April 2017
Topics
● Introduction
● Issues and Requirements
● Module basics
● Module info
● Calling code
● Reflection
● Migration
● Summary
Modules - Project Jigsaw
https://www.flickr.com/photos/distillated/4019168958/
Modules
● JPMS - Java Platform Module System
● Main feature of Java SE 9
● Developed as Project Jigsaw
● Originally targetted at Java SE 7
○ first JSR was in 2005, 12 years ago
● Still incomplete even though very late in 9 development
● Planned release date of July 27th 2017
○ just over 100 days!
Goals
● Scale Java SE to small devices
● Improve security and maintainability
● Better application performance
● Easier to construct & maintain libraries/applications
JDK too big
● Java SE 8 has 210 packages
● Many are not needed by all applications
○ CORBA, Swing, AWT, XML
● Need to split JDK into smaller units, aka modules
Modularised JDK
● 24 modules in Java SE 9
● Every application gets java.base
○ packages java.lang, io, math, net, nio, util, security, text, time
● Separate modules for
○ logging
○ sql
○ xml
○ desktop (AWT/Swing)
○ prefs
○ rmi
Multi-module Javadoc
Deprecated modules
● 6 modules are deprecated for removal
○ java.activation
○ java.corba
○ java.transaction
○ java.xml.bind
○ java.xml.ws
○ java.xml.ws.annotation
● Mass deletion from the JDK!
● Not in Java 9 by default!
Module graph
Out of date, but gives general idea!
Official process
● JEP
○ 200: The Modular JDK
○ 201: Modular Source Code
○ 220: Modular Run-Time Images
○ 260: Encapsulate Most Internal APIs
○ 261: Module System
○ 282: jlink: The Java Linker
● JSR
○ JSR 376: Java Platform Module System
Issues to Requirements
https://www.flickr.com/photos/distillated/4019168958/
Classpath
● Classes are loaded on demand
● Classpath specifies where to find bytecode
○ java -classpath lib/aaa.jar;lib/bbb.jar
● Boot classpath loads the JDK - rt.jar
● Extension classpath loads standard extensions
● User classpath loads user code
○ Defaults to current directory
○ Typically specified using -classpath or -cp
○ Can be jar files or directories
ClassLoader
● Every class is loaded by one class loader
● Most class loaders delegate to a parent
● One class loader for each of the three classpaths
ClassLoader
● Get class from ClassLoader
● Look in parent first
● Searching can be slow
Application
ClassLoader
Extension
ClassLoader
Boot
ClassLoader
MyFoo.class
String.class
Questions
● What happens if class not found on classpath?
● What happens if class appears twice on classpath?
● Does order matter in the classpath?
● What happens if same class is loaded by two different
class loaders?
Classpath
Once on the classpath
● A can call B and vice versa
● A can call C and vice versa
● B can call C and vice versa
Jar files meaningless
A.class
B.class
C.class
Requirement 1
● Reliable configuration
○ replace classpath with graph of dependencies
○ know what is needed to run the application
● When application starts
○ check everything present
○ check no duplicates
○ potentially perform lookup optimisations
Packages are all we have
● Applications & libraries need to be multi-package
● More things public than desirable
● Often see packages with "impl" or "internal" in name
● Clear sign of a missing language feature
Example
● Jackson JSON/XML serialization
○ com.fasterxml.jackson.databind
○ com.fasterxml.jackson.databind.deser
○ com.fasterxml.jackson.databind.deser.impl
○ com.fasterxml.jackson.databind.jsontype
○ com.fasterxml.jackson.databind.jsontype.impl
○ com.fasterxml.jackson.databind.ser
○ com.fasterxml.jackson.databind.ser.impl
○ com.fasterxml.jackson.databind.ser.std
○ com.fasterxml.jackson.databind.type
○ com.fasterxml.jackson.databind.util
Example
● You were never supposed to use code in:
○ sun.misc.*
○ jdk.internal.*
○ etc.
Requirement 2
● Strong encapsulation
○ module can declare an API to other modules
○ packages not on the API are hidden
● Use this to enhance security
○ non-public elements cannot be accessed
JPMS basics
https://www.flickr.com/photos/distillated/4019168958/
What is a module?
● Named
● Set of packages (classes/interfaces)
● Module metadata (module-info.class)
● Typically packaged as a .jar file
● Enforced by the JVM
○ JVM understands classes, interfaces, packages, and now modules
Without modules
opengamma-util.jar
com.opengamma.util
com.opengamma.util.math
com.opengamma.util.impl
Without modules
opengamma-util.jar
com.opengamma.util
com.opengamma.util.math
com.opengamma.util.impl
If this .jar file is on classpath, any
public type/method from any
package can be used
With modules
opengamma-util.jar
com.opengamma.util
com.opengamma.util.math
module-info.class
com.opengamma.util.impl
With modules
opengamma.util
com.opengamma.util
com.opengamma.util.math
module-info.class
com.opengamma.util.impl
module opengamma.util {
exports com.opengamma.util;
exports com.opengamma.util.math;
}
With modules
opengamma.util
com.opengamma.util
com.opengamma.util.math
module-info.class
com.opengamma.util.impl
module opengamma.util {
exports com.opengamma.util;
exports com.opengamma.util.math;
}
Non-exported packages cannot be
seen outside the module
How is it enforced
● Modulepath as well as classpath
● Jar must have a module-info.class
● Module rules enforced when jar on modulepath
● Rules not enforced when jar on classpath
● JVM determines and validates module graph
○ checked at startup
○ advanced use cases can alter parts of the graph at runtime
Modular JDK
● JDK modules always run in module mode
● Classpath sees whole JDK
● Modules specify which JDK modules they need
● Changes JDK structure
○ no more rt.jar
○ packaged as .jmod files
○ no more boot classpath
○ no more extension classpath
JPMS module-info
https://www.flickr.com/photos/distillated/4019168958/
Creating a module
● Two basic questions
● What modules does it depend on?
○ depends on java.base by default
● What packages does it export?
○ nothing exported by default
Module metadata
module opengamma.util {
// other modules this module depends on
requires google.guava;
requires joda.beans;
// packages this module exports to other modules
exports com.opengamma.util;
}
Module graph
opengamma.util
joda.beansgoogle.guava
Dependencies
● org.joda.beans depends on org.joda.convert
module joda.beans {
// other modules this module depends on
requires joda.convert;
// packages this module exports to other modules
exports org.joda.beans;
}
Module graph
opengamma.util
joda.beansgoogle.guava
joda.convert
Transitive dependencies
● But, Joda-Beans exposes types from Joda-Convert
● Express concept using "requires transitive"
module joda.beans {
// other modules this module depends on
requires transitive joda.convert;
// packages this module exports to other modules
exports org.joda.beans;
}
Module graph
opengamma.util
joda.beansgoogle.guava
joda.convert
Optional dependencies
● But org.joda.convert has optional dependency
● If Guava exists at runtime, Joda-Convert adapts
module joda.convert {
// other modules this module depends on
requires static google.guava;
// packages this module exports to other modules
exports org.joda.convert;
}
Module graph
opengamma.util
joda.beans
google.guava
joda.convert
Checks
● Module path contains a set of modules
● One module is the root
● Other modules are resolved to form a graph
● System ensures all necessary modules are available
● System ensures no module found twice
● System ensures same package not in two modules
● System ensures graph has no cycles
Modulepath
● A coherent modulepath is your problem
● Versions, and their selection, not part of JPMS
○ do not put version in module name
● Typically will be done by Maven or Gradle
● Just like the classpath is assembled today
Open to debate as to how much this achieves
the reliable configuration requirement
Services
● SQL drivers, XML parsers, etc.
● Can be specified in module-info
● Module that contains the service implementation:
○ provides com.foo.XmlParser with com.foo.MyXmlParser
● Module that uses the service:
○ uses com.foo.XmlParser
Calling code in another module
https://www.flickr.com/photos/distillated/4019168958/
Hiding packages
● Given two packages
○ org.joda.beans
○ org.joda.beans.impl
● It is possible to completely hide the internal package
○ export org.joda.beans
○ do not export org.joda.beans.impl
Hiding a package
opengamma.util
joda.beansgoogle.guava
org.joda.beans
org.joda.beans.impl
com.opengamma.util
com.google.guava
joda.convert
org.joda.convert
Access
● Only exported packages are visible to other modules
● All other packages are private to the module
● "public" no longer means "public"
● Other modules can only see and use code if:
○ public
○ package is exported by target module
○ package is readable from this module
● Combination referred to as "accessibility"
Access
opengamma.util
joda.beansgoogle.guava
org.joda.beans
org.joda.beans.impl
com.opengamma.util
com.google.guava
joda.convert
org.joda.convert
JVM only allow public method to be
used if readable (downward arrows)
and package is exported (dark blue)
Access
org.joda.beans
org.joda.beans.impl
com.opengamma.util
com.google.guava
JVM prevents calls along dotted lines
Targetted exports
● Package can be exported to a specific module:
○ exports org.joda.beans.impl to joda.special
● Effectively a kind of "friend" access
● Usually suggests poor package structure
Lockdown
● Ability to lockdown packages is powerful
● However, it only works on the modulepath
● Paranoid code could refuse to work on classpath
Reflection
https://www.flickr.com/photos/distillated/4019168958/
Reflection
● Powerful mechanism to access code
● Access package and private scope
○ use setAccessible()
● Vital to frameworks, particularly for bean creation
Reflection in 9
● Can access public elements of exported packages
● Cannot access package/private types/members
● Cannot access non-exported packages
● Much stronger barrier than previously
○ setAccessible() does not help
Reflection
module joda.beans {
// other modules this module depends on
requires transitive joda.convert;
// packages this module exports to other modules
exports org.joda.beans;
opens org.joda.beans.impl;
}
● Modules can selectively allow reflection
● Use "opens", also enables setAccessible()
Reflection
open module joda.beans {
// other modules this module depends on
requires transitive joda.convert;
// packages this module exports to other modules
exports org.joda.beans;
}
● Modules can open all packages if desired
Reflection on the JDK
● JDK is fully modular
● JDK does not have "open" packages
● Thus, cannot reflect on non-public JDK
● Big security boost
● Breaks many existing libraries
● Can use command line flags to force JDK open
○ useful in the short term until the libraries are fixed
Reflecting on modules
● Module information is available to reflection
○ new Module class and getModule() method
○ allows the JVM module graph to be accessed
● See also the ModuleLayer concept
○ intended for advanced use cases
Migration
https://www.flickr.com/photos/distillated/4019168958/
Migration
● Take existing code and migrate it
● New rules make this tricky in some cases
○ eg. SLF4J will need major rework
Use classpath
● Most existing code will run on Java SE 9 classpath
● If it uses internal JDK API, fix or use a flag:
○ --add-exports, --add-opens, --permit-illegal-access
● If it uses removed JDK module, fix or use a flag:
○ --add-modules java.xml.bind
Migration
● Classpath mapped to the "unnamed module"
● Unnamed module reads all other modules
● Cannot access non-exported packages
● Most existing code should run fine in unnamed module
● Named modules cannot access the unnamed module
Classpath
classpath
Foo.jar Bar.jar
unnamed
Classpath
java.se
modulepath
classpath
Foo.jar Bar.jar
unnamed
Classpath
java.se
modulepath
classpath
Foo.jar Bar.jar
joda.beans
joda.convert
Migration
● Additional "automatic module" concept
● Jars without module-info on modulepath
● Exports all packages in jar
● Reads the all other modules, including unnamed
● Used to handle libraries that have not yet modularized
WARNING! There are serious concerns about
using automatic modules in open source projects.
Maven Central will likely ban projects that depend
on an automatic module.
unnamed
Classpath
java.se
modulepath
classpath
Foo.jar Bar.jar
joda.beans
joda-convert.jar
Module naming
● No agreement on module names yet
● Please wait until clear convention agreed
● Might be like package names
○ org.joda.convert
● Might be shorter, but this will lead to clashes
○ joda.convert
WARNING! There are still serious naming concerns
from the open source community.
Modules and Maven
● Maven creates a tree of dependencies
● Often enforced by IDEs
● Not enforced at runtime
● Likely that each pom.xml will be a JPMS module
○ unclear whether module-info.java will be hand written
○ or derived from pom.xml (I suspect hand written, with IDE help)
● JPMS does not handle versions
● JPMS does not select jar files from Maven repo
Modules and OSGi
● OSGi is a module system based on the classpath
● It still works fine on the classpath
● Dynamic loading, lifecycle etc. not part of JPMS
● JPMS is not ClassLoader based
○ all classes in a module have the same ClassLoader
○ same ClassLoader may be used by many modules
Summary
https://www.flickr.com/photos/distillated/4019168958/
Summary
● Modules are a new JVM concept, exposed in Java
○ don't confuse with Maven, OSGi, JBoss modules
● Moving to modules is non-trivial
○ no reflection on JDK internals without command line flag
○ parts of the JDK removed by default and need command line flag
● Reflection is being restricted
○ command line flags allow this to be broken
● Don't rush to modularize!
○ wait for open source to do so first
Summary
● Project Jigsaw:
○ http://openjdk.java.net/projects/jigsaw/
○ Time to test Java SE 9 for bugs is NOW!
● Stephen Colebourne:
○ @jodastephen - feedback & questions
○ http://blog.joda.org
● OpenGamma
○ Strata - open source market risk analytics
○ Cloud-based metrics for derivatives trading and clearing
1 of 74

Recommended

Robot Framework Introduction by
Robot Framework IntroductionRobot Framework Introduction
Robot Framework IntroductionPekka Klärck
226.5K views16 slides
Introduction to java by
Introduction to java Introduction to java
Introduction to java Java Lover
5K views31 slides
Java 8 lambda by
Java 8 lambdaJava 8 lambda
Java 8 lambdaManav Prasad
2.3K views32 slides
Testing with JUnit 5 and Spring by
Testing with JUnit 5 and SpringTesting with JUnit 5 and Spring
Testing with JUnit 5 and SpringVMware Tanzu
1.8K views42 slides
Introduction to Robot Framework – Exove by
Introduction to Robot Framework – ExoveIntroduction to Robot Framework – Exove
Introduction to Robot Framework – ExoveExove
850 views13 slides
Building Large Java Projects Faster: Multicore javac and Makefile integration by
Building Large Java Projects Faster: Multicore javac and Makefile integrationBuilding Large Java Projects Faster: Multicore javac and Makefile integration
Building Large Java Projects Faster: Multicore javac and Makefile integrationFredrik Öhrström
1.4K views49 slides

More Related Content

What's hot

Lambda Expressions in Java 8 by
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8icarter09
1.9K views32 slides
Scripting robot by
Scripting robotScripting robot
Scripting robotChonlasith Jucksriporn
1.3K views16 slides
Java 9/10/11 - What's new and why you should upgrade by
Java 9/10/11 - What's new and why you should upgradeJava 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgradeSimone Bordet
3.2K views44 slides
Introduction to java (revised) by
Introduction to java (revised)Introduction to java (revised)
Introduction to java (revised)Sujit Majety
732 views75 slides
Java basic by
Java basicJava basic
Java basicSonam Sharma
26K views29 slides
Yaml by
YamlYaml
YamlSabarinath Gnanasekar
1K views26 slides

What's hot(20)

Lambda Expressions in Java 8 by icarter09
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8
icarter091.9K views
Java 9/10/11 - What's new and why you should upgrade by Simone Bordet
Java 9/10/11 - What's new and why you should upgradeJava 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgrade
Simone Bordet3.2K views
Introduction to java (revised) by Sujit Majety
Introduction to java (revised)Introduction to java (revised)
Introduction to java (revised)
Sujit Majety732 views
Introduction to Java 11 by Knoldus Inc.
Introduction to Java 11 Introduction to Java 11
Introduction to Java 11
Knoldus Inc.450 views
Testing with JUnit 5 and Spring - Spring I/O 2022 by Sam Brannen
Testing with JUnit 5 and Spring - Spring I/O 2022Testing with JUnit 5 and Spring - Spring I/O 2022
Testing with JUnit 5 and Spring - Spring I/O 2022
Sam Brannen2.3K views
Java/Servlet/JSP/JDBC by FAKHRUN NISHA
Java/Servlet/JSP/JDBCJava/Servlet/JSP/JDBC
Java/Servlet/JSP/JDBC
FAKHRUN NISHA4.3K views
Robot Framework Dos And Don'ts by Pekka Klärck
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'ts
Pekka Klärck131.2K views
Fast as C: How to Write Really Terrible Java by Charles Nutter
Fast as C: How to Write Really Terrible JavaFast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible Java
Charles Nutter10.6K views
Why you should care about Go (Golang) by Aaron Schlesinger
Why you should care about Go (Golang)Why you should care about Go (Golang)
Why you should care about Go (Golang)
Aaron Schlesinger1.6K views
Graal and Truffle: One VM to Rule Them All by Thomas Wuerthinger
Graal and Truffle: One VM to Rule Them AllGraal and Truffle: One VM to Rule Them All
Graal and Truffle: One VM to Rule Them All
Thomas Wuerthinger15.3K views

Viewers also liked

Java 9, JShell, and Modularity by
Java 9, JShell, and ModularityJava 9, JShell, and Modularity
Java 9, JShell, and ModularityMohammad Hossein Rimaz
1.2K views60 slides
Java9 Beyond Modularity - Java 9 más allá de la modularidad by
Java9 Beyond Modularity - Java 9 más allá de la modularidadJava9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadDavid Gómez García
2.7K views123 slides
Java 8 Streams by
Java 8 StreamsJava 8 Streams
Java 8 StreamsManvendra Singh
3.5K views29 slides
Java 9 Modules: The Duke Yet Lives That OSGi Shall Depose by
Java 9 Modules: The Duke Yet Lives That OSGi Shall DeposeJava 9 Modules: The Duke Yet Lives That OSGi Shall Depose
Java 9 Modules: The Duke Yet Lives That OSGi Shall DeposeNikita Lipsky
1.7K views181 slides
Working With Concurrency In Java 8 by
Working With Concurrency In Java 8Working With Concurrency In Java 8
Working With Concurrency In Java 8Heartin Jacob
1.8K views26 slides
Lambda Expressions in Java by
Lambda Expressions in JavaLambda Expressions in Java
Lambda Expressions in JavaErhan Bagdemir
2.7K views19 slides

Viewers also liked(10)

Java9 Beyond Modularity - Java 9 más allá de la modularidad by David Gómez García
Java9 Beyond Modularity - Java 9 más allá de la modularidadJava9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidad
Java 9 Modules: The Duke Yet Lives That OSGi Shall Depose by Nikita Lipsky
Java 9 Modules: The Duke Yet Lives That OSGi Shall DeposeJava 9 Modules: The Duke Yet Lives That OSGi Shall Depose
Java 9 Modules: The Duke Yet Lives That OSGi Shall Depose
Nikita Lipsky1.7K views
Working With Concurrency In Java 8 by Heartin Jacob
Working With Concurrency In Java 8Working With Concurrency In Java 8
Working With Concurrency In Java 8
Heartin Jacob1.8K views
Lambda Expressions in Java by Erhan Bagdemir
Lambda Expressions in JavaLambda Expressions in Java
Lambda Expressions in Java
Erhan Bagdemir2.7K views
Java 8 Stream API. A different way to process collections. by David Gómez García
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.
The do's and don'ts with java 9 (Devoxx 2017) by Robert Scholte
The do's and don'ts with java 9 (Devoxx 2017)The do's and don'ts with java 9 (Devoxx 2017)
The do's and don'ts with java 9 (Devoxx 2017)
Robert Scholte363 views
Real World Java 9 by Trisha Gee
Real World Java 9Real World Java 9
Real World Java 9
Trisha Gee7.2K views

Similar to Java SE 9 modules (JPMS) - an introduction

Java SE 9 modules - an introduction (July 2018) by
Java SE 9 modules - an introduction (July 2018)Java SE 9 modules - an introduction (July 2018)
Java SE 9 modules - an introduction (July 2018)Stephen Colebourne
225 views79 slides
As7 jbug j_boss_modules_yang yong by
As7 jbug j_boss_modules_yang yongAs7 jbug j_boss_modules_yang yong
As7 jbug j_boss_modules_yang yongjbossug
462 views18 slides
Java Platform Module System by
Java Platform Module SystemJava Platform Module System
Java Platform Module SystemVignesh Ramesh
127 views27 slides
Java 9 - Part 2: Jigsaw Modules by
Java 9 - Part 2: Jigsaw ModulesJava 9 - Part 2: Jigsaw Modules
Java 9 - Part 2: Jigsaw ModulesSimone Bordet
140 views20 slides
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376) by
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
10.5K views40 slides
Java 9 preview by
Java 9 previewJava 9 preview
Java 9 previewIvan Krylov
873 views55 slides

Similar to Java SE 9 modules (JPMS) - an introduction(20)

Java SE 9 modules - an introduction (July 2018) by Stephen Colebourne
Java SE 9 modules - an introduction (July 2018)Java SE 9 modules - an introduction (July 2018)
Java SE 9 modules - an introduction (July 2018)
Stephen Colebourne225 views
As7 jbug j_boss_modules_yang yong by jbossug
As7 jbug j_boss_modules_yang yongAs7 jbug j_boss_modules_yang yong
As7 jbug j_boss_modules_yang yong
jbossug462 views
Java 9 - Part 2: Jigsaw Modules by Simone Bordet
Java 9 - Part 2: Jigsaw ModulesJava 9 - Part 2: Jigsaw Modules
Java 9 - Part 2: Jigsaw Modules
Simone Bordet140 views
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376) by Mihail Stoynov
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 Stoynov10.5K views
Prepare for JDK 9 by haochenglee
Prepare for JDK 9Prepare for JDK 9
Prepare for JDK 9
haochenglee526 views
Preparing for java 9 modules upload by Ryan Cuprak
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
Ryan Cuprak1.7K views
What we can expect from Java 9 by Ivan Krylov by J On The Beach
What we can expect from Java 9 by Ivan KrylovWhat we can expect from Java 9 by Ivan Krylov
What we can expect from Java 9 by Ivan Krylov
J On The Beach972 views
Jigsaw - Javaforum 2015Q4 by Rikard Thulin
Jigsaw - Javaforum 2015Q4Jigsaw - Javaforum 2015Q4
Jigsaw - Javaforum 2015Q4
Rikard Thulin384 views
Becoming A Drupal Master Builder by Philip Norton
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master Builder
Philip Norton1K views
Java 9 New Features by Ali BAKAN
Java 9 New FeaturesJava 9 New Features
Java 9 New Features
Ali BAKAN195 views
Puppet managed loadays by Yankee Nemoy
Puppet managed loadaysPuppet managed loadays
Puppet managed loadays
Yankee Nemoy316 views
Modularity of the Java Platform (OSGi, Jigsaw and Penrose) by Martin Toshev
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Martin Toshev5.7K views
JavaOne 2016: Life after Modularity by DanHeidinga
JavaOne 2016: Life after ModularityJavaOne 2016: Life after Modularity
JavaOne 2016: Life after Modularity
DanHeidinga641 views

Recently uploaded

AI and Ml presentation .pptx by
AI and Ml presentation .pptxAI and Ml presentation .pptx
AI and Ml presentation .pptxFayazAli87
11 views15 slides
Copilot Prompting Toolkit_All Resources.pdf by
Copilot Prompting Toolkit_All Resources.pdfCopilot Prompting Toolkit_All Resources.pdf
Copilot Prompting Toolkit_All Resources.pdfRiccardo Zamana
8 views4 slides
Agile 101 by
Agile 101Agile 101
Agile 101John Valentino
7 views20 slides
SAP FOR TYRE INDUSTRY.pdf by
SAP FOR TYRE INDUSTRY.pdfSAP FOR TYRE INDUSTRY.pdf
SAP FOR TYRE INDUSTRY.pdfVirendra Rai, PMP
24 views3 slides
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI... by
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...Marc Müller
37 views83 slides
WebAssembly by
WebAssemblyWebAssembly
WebAssemblyJens Siebert
48 views18 slides

Recently uploaded(20)

AI and Ml presentation .pptx by FayazAli87
AI and Ml presentation .pptxAI and Ml presentation .pptx
AI and Ml presentation .pptx
FayazAli8711 views
Copilot Prompting Toolkit_All Resources.pdf by Riccardo Zamana
Copilot Prompting Toolkit_All Resources.pdfCopilot Prompting Toolkit_All Resources.pdf
Copilot Prompting Toolkit_All Resources.pdf
Riccardo Zamana8 views
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI... by Marc Müller
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...
Marc Müller37 views
360 graden fabriek by info33492
360 graden fabriek360 graden fabriek
360 graden fabriek
info3349238 views
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h... by Deltares
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...
Deltares5 views
Fleet Management Software in India by Fleetable
Fleet Management Software in India Fleet Management Software in India
Fleet Management Software in India
Fleetable11 views
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko... by Deltares
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...
Deltares14 views
Quality Engineer: A Day in the Life by John Valentino
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the Life
John Valentino6 views
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t... by Deltares
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...
Deltares9 views
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema by Deltares
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - GeertsemaDSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema
Deltares17 views
DSD-INT 2023 European Digital Twin Ocean and Delft3D FM - Dols by Deltares
DSD-INT 2023 European Digital Twin Ocean and Delft3D FM - DolsDSD-INT 2023 European Digital Twin Ocean and Delft3D FM - Dols
DSD-INT 2023 European Digital Twin Ocean and Delft3D FM - Dols
Deltares7 views
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports by Ra'Fat Al-Msie'deen
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug ReportsBushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports
Navigating container technology for enhanced security by Niklas Saari by Metosin Oy
Navigating container technology for enhanced security by Niklas SaariNavigating container technology for enhanced security by Niklas Saari
Navigating container technology for enhanced security by Niklas Saari
Metosin Oy14 views
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with... by sparkfabrik
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
sparkfabrik5 views
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J... by Deltares
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...
Deltares9 views
FIMA 2023 Neo4j & FS - Entity Resolution.pptx by Neo4j
FIMA 2023 Neo4j & FS - Entity Resolution.pptxFIMA 2023 Neo4j & FS - Entity Resolution.pptx
FIMA 2023 Neo4j & FS - Entity Resolution.pptx
Neo4j7 views

Java SE 9 modules (JPMS) - an introduction