Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual...
Transcript of Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual...
![Page 1: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/1.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Project Jigsaw: Under The Hood
Alex Buckley Java Platform Group, Oracle August 2016
![Page 2: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/2.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
JDK 9 At A Glance
• Module System
• Modular JDK
• Language enhancements
• Library enhancements
• Tool enhancements
2
![Page 3: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/3.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
JDK 9 At A Glance
• Module System
• Modular JDK
• Language enhancements
• Library enhancements
• Tool enhancements
3
![Page 4: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/4.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Project Jigsaw: Under The Hood
Part I: Accessibility and Readability
Part II: Different Kinds of Modules
Part III: Loaders and Layers
Part IV: The Road Ahead
4
![Page 5: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/5.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Part I: Accessibility and Readability
5
![Page 6: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/6.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Accessibility (JDK 1 – JDK 8)
• public
• protected
• <package>
• private
6
![Page 7: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/7.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Accessibility (JDK 9 –)
• public to everyone
• public but only to specific modules
• public only within a module
• protected
• <package>
• private
7
![Page 8: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/8.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
‘public’ no longer means “accessible”.
8
![Page 9: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/9.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
The result:
9
![Page 10: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/10.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Accessibility and Module Declarations
10
// src/java.sql/module-info.java
module java.sql {
exports java.sql;
exports javax.sql;
exports javax.transaction.xa;
}
![Page 11: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/11.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Loader 1
class P.C class Q.D accesses
Accessibility and Class Loaders
delegates Loader 2
class Q.D
Loader 1
class P.C class Q.D no access
no delegation Loader 2
class Q.D
11
![Page 12: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/12.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Loader 1
class P.C class Q.D accesses
Accessibility and Class Loaders
delegates Loader 2
class Q.D
Loader 1
class P.C class Q.D no access
no delegation Loader 2
class Q.D
12
![Page 13: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/13.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Loader 1
Module X
One Loader, Many Modules
13
Module Y
class Q.D accesses?
class P.C
![Page 14: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/14.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
The Role of Readability
14
Loader 1
Module X Module Y
class Q.D accesses
class P.C
reads
![Page 15: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/15.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
The Role of Readability
15
module X {
requires Y;
}
module Y {
exports Q;
}
Module X Module Y
exports
reads
class Q.D accesses
class P.C
![Page 16: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/16.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Readability in the JDK Module Graph
module java.sql {
requires java.logging;
exports java.sql;
}
module java.logging {
exports java.util.logging;
}
package java.util.logging;
public class Logger {
...
}
package java.sql;
import java.util.logging.Logger;
public class DriverManager {
new Logger() {..} }
16
![Page 17: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/17.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Readability in the JDK Module Graph
module java.sql {
requires java.logging;
exports java.sql;
}
module java.logging {
exports java.util.logging;
}
package java.util.logging;
public class Logger {
...
}
package java.sql;
import java.util.logging.Logger;
public interface Driver {
Logger getParentLogger(); }
17
![Page 18: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/18.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Readability in the JDK Module Graph
module java.sql {
requires java.logging;
exports java.sql;
}
module java.logging {
exports java.util.logging;
}
module myapp {
requires java.sql;
requires java.logging;
}
18
![Page 19: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/19.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Readability in the JDK Module Graph
module java.sql {
requires public java.logging;
exports java.sql;
}
module java.logging {
exports java.util.logging;
}
module myapp {
requires java.sql;
requires java.logging;
}
19
![Page 20: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/20.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Readability in the JDK Module Graph
20
module java.sql {
requires public java.logging;
exports java.sql;
}
module java.logging {
requires public logextras;
exports java.util.logging;
}
module logextras { … }
module myapp {
requires java.sql;
requires java.logging;
}
![Page 21: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/21.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Direct and Implied Readability
• X reads Y if:
– X requires Y
or
– X reads Q, and Q requires public Y
Module X
requires Y
Module Y reads
Module X
requires Q
Module Q
requires public Y
reads Module Y
reads
reads
21
![Page 22: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/22.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 22
void doSomething(Class<?> c) {
Method[] ms = c.getDeclaredMethods();
ms[0].invoke(…);
}
Core Reflection
![Page 23: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/23.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 23
Core Reflection
setAccessible(true)
![Page 24: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/24.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Summary of Part I: Accessibility and Readability
• Accessibility used to be a simple check for ‘public’ or “same package”.
• In JDK 9, accessibility strongly encapsulates module internals.
• Accessibility relies on readability, which can be direct or implied.
• Accessibility is enforced by the compiler, VM, and Core Reflection.
24
![Page 25: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/25.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Part II: Different Kinds of Modules
25
![Page 26: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/26.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Named Modules
26
java.base java.sql
jdk.compiler jdk.javadoc
Named modules
guava.jar junit.jar
glassfish.jar hibernate.jar
classpath
![Page 27: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/27.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Unnamed module
The Unnamed Module
27
java.base java.sql
jdk.compiler jdk.javadoc
Named modules
guava.jar junit.jar
glassfish.jar hibernate.jar
![Page 28: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/28.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Unnamed module
The Unnamed Module
28
java.base java.sql
jdk.compiler jdk.javadoc
Named modules
guava.jar junit.jar
glassfish.jar hibernate.jar
![Page 29: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/29.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Automatic Modules
29
Unnamed module
java.base java.sql
jdk.compiler jdk.javadoc
Named modules
guava junit.jar
glassfish.jar hibernate.jar
![Page 30: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/30.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Automatic Modules
30
Unnamed module
java.base java.sql
jdk.compiler jdk.javadoc
Named modules
guava junit.jar
glassfish.jar hibernate.jar
![Page 31: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/31.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Automatic Modules
31
Unnamed module
java.base java.sql
jdk.compiler jdk.javadoc
Named modules
guava junit.jar
glassfish.jar hibernate.jar
myapp
![Page 32: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/32.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Summary of Part II: Different Kinds of Modules
• Explicit named modules (java.sql)
• Automatic named modules (guava)
• Unnamed module (a.k.a. classpath)
• Lots of readability “for free” to help with migration.
32
![Page 33: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/33.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Part III: Loaders and Layers
33
![Page 34: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/34.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Class loading doesn’t change.
34
![Page 35: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/35.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Application loader Platform loader Bootstrap loader
Class Loading in JDK 9
Java Virtual Machine
35
![Page 36: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/36.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Application loader Platform loader Bootstrap loader
Class Loading in JDK 9
java.base java.logging java.sql java.corba jdk.compiler guava
Java Virtual Machine
36
junit.jar glassfish.jar
![Page 37: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/37.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Application loader Platform loader Bootstrap loader
Modular Class Loading on JDK 9
Java Virtual Machine
37
Module System
Loader A
A.jar
Loader B
B.jar
Loader C
C.jar
![Page 38: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/38.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Application loader Platform loader Bootstrap loader
Modular Class Loading in JDK 9
java.base java.logging java.sql java.corba jdk.compiler guava
Java Virtual Machine
38
junit.jar glassfish.jar
Java Platform Module System
![Page 39: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/39.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Boot layer
Layers
39
Java Platform Module System
Java Virtual Machine
Application loader Platform loader Bootstrap loader
java.base java.logging java.sql java.corba jdk.compiler guava
![Page 40: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/40.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Layer Creation
String moduleName -> {
switch (moduleName) {
case “java.base”:
case “java.logging”:
return BOOTSTRAP_LDR;
default:
return APP_LDR;
}
}
(1) (2)
40
![Page 41: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/41.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Boot layer
Layers and the VM
41
Application loader Bootstrap loader
Java Platform Module System
java.base java.logging jdk.compiler guava
Java Virtual Machine
java.base java.logging java.sql java.corba jdk.compiler guava
Platform loader
java.sql java.corba
![Page 42: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/42.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 42
Well-formed Graphs
![Page 43: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/43.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Well-formed Graphs
• A module must read only one module that exports a package called P.
43
Module X
requires Y requires Z
Module Y
exports P
reads
Module Z
exports P
reads
![Page 44: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/44.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Well-formed Maps
• Different modules with the same package must map to different loaders.
44
String moduleName -> {
switch (moduleName) {
case “java.base”:
case “java.logging”:
return BOOTSTRAP_LDR;
default:
return APP_LDR;
}
}
![Page 45: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/45.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
ClassLoader2
Well-formed Maps
• Loader delegation must respect module readability.
45
ClassLoader1
Module X Module Y
class Q.D accesses
class P.C
reads
delegates
![Page 46: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/46.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Layers of Layers
46
Boot layer
Application loader Platform loader Bootstrap loader
Java Platform Module System
Java Virtual Machine
![Page 47: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/47.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Layers and Versions
47
Boot layer
Application loader Platform loader Bootstrap loader
Java Platform Module System
java.base java.logging java.sql java.corba myapp mylib
Java Virtual Machine
Hadoop layer
Loader 16
guava@11 hadoop
JavaScript layer
Loader 23
guava@18 closure- compiler
Loader 17
jackson@1
Loader 24
jackson@2
![Page 48: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/48.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Summary of Part III: Loaders and Layers
• Modules do a better job of encapsulation than class loaders, but class loaders are still necessary.
• Layers control the relationship between modules and class loaders.
• Assuming class loaders respect the module graph, the system is safe by construction – no cycles or split packages.
48
![Page 49: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/49.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Summary of Summaries
• Strong encapsulation of modules by the compiler, VM, Core Reflection.
• Unnamed and automatic modules help with migration.
• The system is safe by construction – no cycles or split packages.
49
![Page 50: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/50.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Part IV: The Road Ahead
50
![Page 51: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/51.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Incompatible Changes in JDK 9
• java.util.{logging,jar}, java.awt[.dnd].peer
• org.omg.CORBA, javax.rmi, javax.xml.{bind,ws}, javax.annotation
• java[.vm][.specification].version
51
• sun.misc
• sun.net.www, sun.security.x509, com.sun.org.apache.xerces.internal.jaxp
• rt.jar, tools.jar, -Xbootclasspath/p
![Page 52: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/52.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Incompatible Changes in JDK 9
• java.util.{logging,jar}, java.awt[.dnd].peer
• org.omg.CORBA, javax.rmi, javax.xml.{bind,ws}, javax.annotation
• java[.vm][.specification].version
52
• sun.misc
• sun.net.www, sun.security.x509, com.sun.org.apache.xerces.internal.jaxp
• rt.jar, tools.jar, -Xbootclasspath/p
![Page 53: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/53.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Advice for Frameworks
53
Modularize nothing
Modularize the framework
Accept modular input
Modularize the framework and the input
![Page 54: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/54.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Preparing for JDK 9
• JDK 8: Run jdeps –jdkinternals MyApp.jar
• JDK 9: Early Access binaries at http://jdk9.java.net/
• JEP 261: Module System
• JEP 260: Encapsulate Most Internal APIs
• JEP 223: New Version String Scheme
• JEP 220: Modular Run-Time Images
• JEP 200: The Modular JDK
54
![Page 55: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/55.jpg)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Safe Harbor Statement
The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into 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.
55
![Page 56: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18](https://reader034.fdocuments.in/reader034/viewer/2022042300/5eca7cdccb1e5a2e1e634008/html5/thumbnails/56.jpg)