SlideShare a Scribd company logo
1 of 73
Download to read offline
dr. sc. Branko Mihaljević
Aleksander Radovan
doc. dr. sc. Martin Žagar
Stjepan Matijašević
HUJAK
www.hujak.hr 1HUJAK - B. Mihaljević, A. Radovan, M. Žagar
The State of
Java
Today and Tomorrow
• #1 Development Platform
• Continued growth of Java for 24+ years
• #1 Programming Language
• For Cloud, Big Data, and DevOps
• A Few Dozen Billion Devices run Java
• 10 Million Java Developers
• Many have Java Certificates
• 50+ JVM languages (and even more with GraalVM+Truffle+Sulong)
• JVM languages include: Groovy, Kotlin, Scala, Clojure, JRuby, Jython, Fantom,
Ceylon, Xtend, X10, LuaJ, Golo, Frege, Mirah, Eta and JavaScript
So, what is Java … for us, developers?
www.hujak.hr 2HUJAK - B. Mihaljević, A. Radovan, M. Žagar
Current State of Java?
• Some questions for you:
• Are you still using Java 8 (or 7, or 6, or …)?
• Did you use Java 9 (or 10)?
• Started using the LTS version Java 11?
• Upgraded to the latest Java 13?
• What about Java Jakarta EE?
www.hujak.hr 3HUJAK - B. Mihaljević, A. Radovan, M. Žagar
"Moving Java Forward Faster"
www.hujak.hr 4
20191995 1998 2001 2004 2007 2010 20222016
2018-03-20
2017-09-21
2014-03-18
Java EE 7
2013-06-12
HUJAK
2011-12-132011-07-28
Java EE 6
2009-12-10
Java SE 6
Mustang
2006-12-11
Java EE 5
2006-05-11
Java 5
J2SE 5.0
Tiger
2004-10-04
J2EE 1.4
2003-11-11
Java 1.4
J2SE 1.4
Merlin
2002-02-06
J2EE 1.3
2001-09-24
Java 1.3
J2SE 1.3
Kestrel
2000-05-08
J2EE 1.2
1999-12-12
Java 1.2
J2SE 1.2
Playground
1998-12-08
JPE
Java
Professional
Edition
1998-05
Java 1.1
JDK 1.1
1997-02-19
Java 1
JDK 1.0
Oak
Java
JDK
Alpha-
Beta
1995
© 2020, HUJAK
2010-01-27
Java SE 7
Dolphin
Java SE 8
Spider
Java EE 8
2017-09-21
2013
1996-01-23
2018-09-25
2019-03-19
2019-09-17
2020-03-17
2020-09
2021-03
2021-09
Jakarta EE
Eclipse
Foundation
HUJAK - B. Mihaljević, A. Radovan, M. Žagar
How is Java currently holding?
• TIOBE index for February 2020
www.hujak.hr 5HUJAK - B. Mihaljević, A. Radovan, M. Žagar
Rank Language Ratings
1 Java 17.358%
2 C 16.766%
3 Python 9.345%
4 C++ 6.164%
5 C# 5.927%
Source: TIOBE Index for February 2020, www.tiobe.com/tiobe-index/
What about Java download?
• When you type "Java download"
in Google you'll probably get
www.java.com
• And you can download
the "latest" JRE 
Java 8 Update 241
from January 14, 2020
• OK, but what about the real
latest JDK download(s)?
www.hujak.hr 6HUJAK - B. Mihaljević, A. Radovan, M. Žagar
Available JDKs
• Oracle JDK www.oracle.com/technetwork/java/javase/downloads/
• Oracle Technology Network (OTN) License Agreement for Oracle Java SE
or choose from many OpenJDKs:
• Oracle OpenJDK jdk.java.net
• GNU General Public License version 2 with the Classpath Exception (GPLv2+CE)
• Java SE 13.0.2, Java SE 11.0.6 (LTS) or Java SE 8u241 (LTS)
• AdoptOpenJDK's OpenJDK adoptopenjdk.net
• Apache License, Version 2.0 and GPLv2+CE
• OpenJDK 13.0.2+8, OpenJDK 11.0.6+10 (LTS), or OpenJDK 8u242 (LTS) on Hotspot JVM or
OpenJ9 JVM
• Azul's Zulu OpenJDK www.azul.com/downloads/zulu/
• From OpenJDK 13 back to Open JDK 6 for Windows, Linux, macOS and Solaris
• Others: Amazon's Corretto OpenJDK (11 and 8), RedHat's OpenJDK, SAP's
SapMachine OpenJDK, Alibaba Dragonwell, Linux distribution's OpenJDKs …
www.hujak.hr 7HUJAK - B. Mihaljević, A. Radovan, M. Žagar
OpenJDK or Commercial JDK?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 8
All I'm offering is the truth – nothing more
JDK 8 – ancient history
• JDK 8 in March 2014
• We will not talk about JDK 8 anymore 
• Ooops, are you still using it?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 9
JDK 9 – very very old news?
• JDK 9 in September 2017
• Many new features and APIs (after 3.5 years)
• 90 JEPs included
• Java Platform Module System (JPMS)
• All core Java libraries are now modules (JEP 220)
• 97 modules: 28 Java SE, 8 JavaFX, 59 JDK, 2 Oracle…
• Encapsulation
• Most internal APIs encapsulated (JEP 260) and analyzing dependencies (jdeps)
• And … new release model
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 10
OpenJDK Release Model
• New Features included (only) when ready
• Feature release versions released every 6 months (in March & September)
• Update releases shipped quarterly (in January, April, July, and October)
• Long-term support (LTS) feature release every 3 years
• LTS for all releases is not practical
• Updates available for at least 3 years
• LTS versions: JDK 11 (September 2018), JDK 17 (September 2021), JDK 24 (2024) …
www.hujak.hr 11HUJAK - B. Mihaljević, A. Radovan, M. Žagar
JDK 10 – it was new, and already old?
• JDK 10 in March 2018
• 109 new features and APIs (after 6 months)
• 12 JEPs included (only?)
www.hujak.hr 12HUJAK - B. Mihaljević, A. Radovan, M. Žagar
• 313: Remove the Native-Header
Generation Tool (javah)
• 314: Additional Unicode Language-Tag
Extensions
• 316: Heap Allocation on Alternative
Memory Devices
• 317: Experimental Java-Based JIT Compiler
• 319: Root Certificates
• 322: Time-Based Release Versioning
• 286: Local-Variable Type Inference
• 296: Consolidate the JDK Forest into a
Single Repository
• 304: Garbage-Collector Interface
• 307: Parallel Full GC for G1
• 310: Application Class-Data Sharing
• 312: Thread-Local Handshakes
 vars
Local Variable Type Inference (JEP 286)
• Extending type inference to declarations of local variables and initializers
• Static type safety with reduced ceremony associated with writing Java
• Examples:
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
var m = new HashMap <String, List<BigDecimal>>();
• Restricted to: local variables with initializers, indexes in the enhanced for-
loop, locals declared in a traditional for-loop
• Not available for: method parameters, constructor parameters, method
return types, fields, catch formals or any other kind of variable declaration
www.hujak.hr 13HUJAK - B. Mihaljević, A. Radovan, M. Žagar
JDK 11 – LTS version (finally)
• JDK 11 in September 2018
• 90 new features and APIs!
• LTS version (first in a long time, after JDK 8 in 2014)
• 17 JEPs included:
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 14
• 181: Nest-Based Access Control
• 309: Dynamic Class-File Constants
• 315: Improve Aarch64 Intrinsics
• 318: Epsilon: A No-Op Garbage Collector
• 320: Remove the Java EE and CORBA Modules
• 321: HTTP Client (Standard)
• 323: Local-Variable Syntax for Lambda Parameters
• 324: Key Agreement with Curve25519 and Curve448
• 327: Unicode 10
• 328: Flight Recorder
• 329: ChaCha20 and Poly1305 Cryptographic
Algorithms
• 330: Launch Single-File Source-Code Programs
• 331: Low-Overhead Heap Profiling
• 332: Transport Layer Security (TLS) 1.3
• 333: ZGC: A Scalable Low-Latency Garbage
Collector (Experimental)
• 335: Deprecate the Nashorn JavaScript Engine
• 336: Deprecate the Pack200 Tools and API
New Garbage Collectors
Many GCs to choose from:
• Serial GC
• Parallel GC (and Parallel Old GC)
• CMS (Concurrent Mark and Sweep) GC (deprecated in Java 9)
• G1 (Garbage-First) GC (default since Java 9)
• Parallel Full GC for G1 (updated in Java 10)
• Improved in Java 12+
• ZGC (experimental in Java 11, improved later)
• Shenandoah GC (experimental in Java 12, improved)
• Azul's C4 GC
• Epsilon GC (no-op GC, experimental in Java 11)
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 15Image Source: 5 Coding Hacks to Reduce GC Overhead, Tall Weiss, OverOps, 2013
JDK 12
• JDK 12 in March 2019
• 39 new features and APIs – relatively small number
• 8 JEPs included:
• 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
• 230: Microbenchmark Suite
• 325: Switch Expressions (Preview) <– most interesting to developers
• 334: JVM Constants API
• 340: One AArch64 Port, Not Two
• 341: Default CDS Archives
• 344: Abortable Mixed Collections for G1 <– performance
• 346: Promptly Return Unused Committed Memory from G1 <– performance
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 16
What are Preview Features?
• Preview language (or VM) features are fully implemented and fully
specified, yet impermanent
• Made available in a release to get
real world use feedback from developers
• To try out a preview feature it has to be
enabled at compile time and at runtime
• For example on JDK 13 you should use:
javac --release 13 --enable-preview Foo.java
java --enable-preview Foo
• Note: You cannot enable preview features of previous JDK
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 17
Switch Expressions (Preview) (JEP 325)
• Extend switch statement so it can be used as a statement or an expression
• Both can use either a "traditional" or "simplified" scoping and control flow behavior
• "Simplified" switch form with "case L ->" switch labels
• If a label is matched, then only the expression or statement to the right of an arrow
label is executed – there is no fall through
• Used also as an expression
• Without fall through
• Without default?
• Note: Superseded by JEP 354 in JDK 13
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 18
Java 13 – the latest
• JDK 13 in September 2019
• 81 new features and APIs – relatively small number
• 5 JEPs included (only):
• 350: Dynamic CDS Archives
• 351: ZGC: Uncommit Unused Memory
• 353: Reimplement the Legacy Socket API
• 354: Switch Expressions (Preview)
• 355: Text Blocks (Preview)
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 19
Switch Expressions (Preview) (JEP 354)
• Supersedes JEP 325 to extend switch so it can be used as either a
statement or an expression
• Both can use either traditional case ... : labels (with fall through) or
new case ... -> labels (with no fall through)
• Introduces new statement for yielding a value from a switch expression
• Based on feedback on design and experience in JDK 12 to simplify everyday coding
• Also to prepare the way for use of pattern matching (JEP 305) in switch
• Note: This preview should be declared standard in JEP 361
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 20
Text Blocks (Preview) (JEP 355)
• Add text blocks to the Java language
• A text block is a multi-line string literal that
• Avoids the need for most escape sequences
• Automatically formats the string in a predictable way
• Gives the developer control over format when desired
• Follow-on effort to explorations begun in JEP 326 (Raw String Literals)
• Goals
• Easy to express strings that span several lines of source code (avoiding escape seqs)
• Enhance readability of non-Java code embedded in Java programs as strings
• Support migration from string literals
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 21
Text Blocks – examples
• SQL example using a "two-dimensional" block of text
String query = """
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = 'INDIANAPOLIS'
ORDER BY `EMP_ID`, `LAST_NAME`;
""";
• Polyglot language example using a "two-dimensional" block of text
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
Object obj = engine.eval("""
function hello() {
print('"Hello, world"');
}
hello();
""");www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 22
JDK 14 – Final Release Candidate
• JDK 14 in March 17, 2020
• New features and APIs at openjdk.java.net/projects/jdk/14/
• JDK 14 Early-Access Builds at jdk.java.net/14/
• 16 JEPs targeted:
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 24
• 305: Pattern Matching for instanceof (Preview)
• 343: Packaging Tool (Incubator)
• 345: NUMA-Aware Memory Allocation for G1
• 349: JFR Event Streaming
• 352: Non-Volatile Mapped Byte Buffers
• 358: Helpful NullPointerExceptions
• 359: Records (Preview)
• 361: Switch Expressions (Standard)
• 362: Deprecate the Solaris and SPARC Ports
• 363: Remove the Concurrent Mark Sweep
(CMS) Garbage Collector
• 364: ZGC on macOS
• 365: ZGC on Windows
• 366: Deprecate the ParallelScavenge +
SerialOld GC Combination
• 367: Remove the Pack200 Tools and API
• 368: Text Blocks (Second Preview)
• 370: Foreign-Memory Access API (Incubator)
Garbage Collectors improvements
• NUMA-Aware Memory Allocation for G1 (JEP 345)
• Improve G1 performance on large machines by implementing NUMA-aware memory
allocation
• Remove the Concurrent Mark Sweep (CMS) Garbage Collector (JEP 363)
• ZGC on macOS (JEP 364)
• Port the ZGC garbage collector to macOS
• ZGC on Windows (JEP 365)
• Port the ZGC garbage collector to Windows
• Deprecate the ParallelScavenge + SerialOld GC Combination (JEP 366)
• A combination of GC algorithms that is very little used but requires a significant amount of
maintenance effort – the parallel young generation GC and the serial old GC
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 25
Many language-related features
• Pattern Matching for instanceof (Preview) (JEP 305)
• Records (Preview) (JEP 359)
• Switch Expressions (Standard) (JEP 361)
• Text Blocks (Second Preview) (JEP 368)
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 26
New Tools
• Packaging Tool (JEP 343)
• jpackage – new tool for packaging self-contained Java applications
• Implementation at jdk.java.net/jpackage/
• Takes a Java runtime and your application, and creates a native distributable
package
• Can be used for desktop and command line apps inj JDK 11+
• Supports Linux (rpm, deb), Mac (dmg, pkg) and Windows (exe, msi)
• jpackage runs jlink to create runtime, including application if modular
• Note: there was javapackager tool in JDK 8 with JavaFX (removed)
• JFR Event Streaming (JEP 349)
• Expose JDK Flight Recorder data for continuous monitoring
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 27
Helpful NullPointerExceptions (JEP 358)
• Improve the usability of NullPointerExceptions (NPEs) generated by the JVM by
describing precisely which variable was null
• Offers helpful information to developers and support about the premature termination
• Improves program understanding by more clearly associating a dynamic exception with
static program code
• Computed at runtime through bytecode access path analysis
• Reduces the confusion and concern that new developers often have about
NullPointerExceptions
• Instead of not very useful
Exception in thread "main" java.lang.NullPointerException
at Prog.main(Prog.java:5)
• We can use…
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 28
Helpful NullPointerExceptions – examples
• Example: a.i = 99; could generate the message
Exception in thread "main" java.lang.NullPointerException:
Cannot assign field 'i' because 'a' is null.
• Example: a.b.c.i = 99; could generate the message
Exception in thread "main" java.lang.NullPointerException:
Cannot read field 'c' because 'a.b' is null.
• Example: a[i][j][k] = 99; could generate the message
Exception in thread "main" java.lang.NullPointerException:
Cannot load from object array because 'a[i][j]' is null.
• Example: a.i = b.j; could generate the message
Exception in thread "main" java.lang.NullPointerException:
Cannot read field 'j' because 'b' is null.
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 29
JDK 15 – in Early Access
• JDK 15 in September 2020
• New features and APIs at openjdk.java.net/projects/jdk/15/spec/
• JDK 15 Early-Access Builds available at jdk.java.net/15/
• No JEPs targeted (so far) 
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 30
Programming Polyglotism & other trends
• Polyglot programming problems:
• Cross-language interoperability
• General-purpose programming languages not-so-good performance
• Language tools – configuration, debugging…
• New ideas:
• Project Maxine with OOP compiler
• OpenJDK's Project Metropolis with GraalVM
• GraalVM – high-performance embeddable polyglot virtual machine that enables
you to combine different programming languages that incur almost no overhead
• In the JVM, into standalone native image, or embedded into large application
• + Quarkus: Kubernetes Native Java stack
tailored for GraalVM & OpenJDK HotSpot
www.hujak.hr 31HUJAK - B. Mihaljević, A. Radovan, M. Žagar
GraalVM – architecture
• JVM – HotSpot VM or
other
• JVM Compiler
Interface (JVMCI) –
optimizing compiler
• Graal Compiler – new
optimized compiler for
JVM languages
• Truffle framework –
any other language
• Sulong (LLVM) – high-
performance Low-
Level Virtual Machine
bitcode interpreter
• + Native images with
Substrate VM
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 32
More Long-term Java Future
• Project Amber – incubator for smaller, productivity-oriented language
features and simplifying syntax
• Project Valhalla – incubator project for advanced JVM and language
feature candidates
• Project Panama – to interconnect JVM and native code
• Project Loom – to reduce complexity in writing concurrent applications
• Project Metropolis – JVM re-written in Java, i.e. "Java on Java"
• Project Skara – alternative SCM & code review for JDK (Git)
www.hujak.hr 33HUJAK - B. Mihaljević, A. Radovan, M. Žagar
Project Amber
• Right-sizing language ceremony
• Local-Variable Type Inference (var) (JEP 286) – in JDK 10
• Local Variable Syntax for Lambda Parameters (JEP 323) – in JDK 11
• Switch Expressions (JEP 325, JEP 354, JEP 361) – expressions in switch statements and
lambdas – (in JDK 12 and JDK 13 as preview, in JDK 14 as standard)
• Text Blocks (JEP 355) – (in JDK 13 as a preview, in JDK14 a second preview)
• Pattern Matching for instanceof (JEP 305) – switch statement with case for different types
of objects (in JDK14 as preview)
• Java Compiler Intrinsics for JDK APIs (JEP 348) – in progress
• On hold / withdrawn:
• Lambda Leftovers (JEP 302) – (on hold)
• Enhanced Enums (JEP 301) – generic enums with type parameters (on hold)
• Raw string literals (JEP 326) – use of single backquote (withdrawn)
• More at openjdk.java.net/projects/amber/www.hujak.hr 34HUJAK - B. Mihaljević, A. Radovan, M. Žagar
Project Valhalla
• Incubator project for advanced Java VM and language feature candidates
• Problem:
• Primitives for performance and objects for OO, encapsulation, polymorphism, inheritance…
• But still, there is no ArrayList<int> 
• If we use Integer than (un)boxing, creation of object, heap, indirection reference…
• Value Objects (JEP 169) – "codes like a class, works like a primitive"
• Supports methods, fields, implements interface, encapsulation, generic…
• Doesn't support mutation or sub-classes
• Generics over Primitive Types (JEP 218) – extends generic types to support the
specialization of generic classes and interfaces over primitive types
• More at openjdk.java.net/projects/valhalla/
www.hujak.hr 35HUJAK - B. Mihaljević, A. Radovan, M. Žagar
Value Types
• Value types represent pure data aggregates, dropping the features of regular
objects
• Pure data, without identity
• Equality comparison based on state
• No representational polymorphism or immutable or non-nullable objects
• Enables passing value types on the stack instead of having to allocate them on
the heap
• Getting data aggregates that have runtime behavior similar to Java primitives,
such as int or float 
• However, value types can have methods and fields
• Faster and smaller objects and user-defined primitives?
• We can use value types as generic types without boxing
• This directly leads us to the other big project: specialized generics
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 36
Specialized Generics
• Generification over language primitives – we currently use boxed types,
such as Integer for int or Float for float
• This boxing creates an additional layer of indirection, thereby defeating the
purpose of using primitives for performance enhancement in the first place
• Therefore, we see many dedicated specializations for primitive types in
existing frameworks and libraries, like IntStream<T> or ToIntFunction<T>
• Keeping the performance improvement of using primitives
• So, specialized generics is an effort to remove the needs for those “hacks”
• Instead, the Java language strives to enable generic types for basically
everything: object references, primitives, value types, and maybe even void
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 37
Project Panama
• Interconnecting JVM and native code
• Featuring native function calling and native data access from the JVM
• Foreign function interface (FFI) as a simple, safe and performant
replacement for JNI, includes:
• Native function calling from JVM (C, C++)
• Native data access from JVM or inside JVM heap
• Native library management APIs and native-oriented JIT optimizations
• Access to low-level hardware functionality from Java (vector instructions,
special memory types)?
• Big Data, Machine Learning?
www.hujak.hr 38HUJAK - B. Mihaljević, A. Radovan, M. Žagar
Project Loom
• Threads cannot match the scale of the domain’s unit of concurrency
• Millions of transactions, users or sessions – number of OS threads is much less
• Most concurrent applications need some synchronization between threads
• An expensive context switch between OS threads
• Project Loom – reducing complexity in writing concurrent applications
• Alternative, user-mode thread implementations, delimited continuations, and other
constructs involving call-stack manipulation
• Proposal for lightweight JVM-level threads called fibres as alternative implementation of
threads
• Managed by schedulers like ForkJoinPool, written in Java
• Millions of fibres spawned in a single JVM instance
• Ordinary Java threads preserved, performance improved, and footprint reduced
• Less memory and almost zero overhead when task switching
www.hujak.hr 39HUJAK - B. Mihaljević, A. Radovan, M. Žagar
New Java 11 Certifications
• OCP Java SE 11 Developer Certification (finally )
• With two exams!
• There is no longer OCA for Java SE
• Java SE 11 Programmer I – Exam 1Z0-815
• Questions: 80, Duration: 180 minutes, Passing score: 63%
• Java SE 11 Programmer II – Exam 1Z0-816
• Questions: 80, Duration: 180 minutes, Passing score: 63%
• Guide: Java SE 11 Certification Questions Answered
• www.oracle.com/a/ocom/docs/dc/ou-5021-java-se11-faq-4.pdf
• To get a certificate you need both exams passed!
• Price: each exams is approx. 1500 HRK
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 40
Upgrade to Java 11 Certifications
• If you have OCP/OCA/SCP Java SE 6, 7 or 8:
• Upgrade OCP Java 6, 7 & 8 to Java SE 11 Developer – Exam 1Z0-817
• Questions: 58, Duration: 120 minutes, Passing score: 61%
• Upgrade OCA Java 5, 6, 7 & 8 to Java SE 11 Developer – Exam 1Z0-816
• Questions: 80, Duration: 180 minutes, Passing score: 63%
• + Free video: Java 11 – New Features
• For students only (JDK 8 only):
• Java Foundations Certified Junior Associate Certification – Exam 1Z0-811
• Questions: 75, Duration: 150 minutes, Passing score: 65%, Price: approx. 600 HRK
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 41
Java 11 OCP Books – thank you
• 40% discount code – for all products
in all formats, valid until April 22
ctwjavantura20
• Java SE 11 Programmer I Certification Guide –
some free eBook codes at the closing ;-)
• Great book by Mala Gupta
• For the 1Z0-815 certification test
with complete coverage of the exam
• In Manning Early Access Program –
currently 10 out of 14 chapters available
• www.manning.com/books/java-se-11-programmer-i-
certification-guide
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 42
Other Java 11 OCP Books
• New books by Jeanne Boyarsky &
Scott Selikoff
• Java OCP 11 Programmer I Study Guide 1Z0-815
in November 2019
• $35-$45 per book
• Java OCP 11 Programmer II Study Guide 1Z0-816
not published yet, released in June 2020
• Set of both books
Java OCP 11 Developer Complete Study Guide
• More at www.selikoff.net/ocp11-1/
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 43
Various ways to get Java certificate
• For students
• From OCA
• From OCP
• From the
scratch
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 44
Is Java still "Free"?
• For free use of OpenJDK with GPLv2+CE license
• Updates refers to code patches – typically free of charge
• Support means fixing bugs and answering questions – was never free of
charge
• LTS release every 3 years – does not automatically mean 3 years of free
updates
• Oracle JDK 11 (and onward) in production (only) with commercial Java SE
subscription
• Free JDK 11 (and later) are only OpenJDK binaries
• However, Oracle JDK 8 can be used indefinitely for free
• Without any further security patches and bug fixes
www.hujak.hr 45HUJAK - B. Mihaljević, A. Radovan, M. Žagar
Java SE Subscriptions from Oracle
• Oracle Java SE Desktop Subscription – currently 200 kn (or up to 50% less)
• Combines Java SE Licensing and Support for use on Desktop deployments
• 1 Year Term Subscription
• Metric: Named User Plus
• Oracle Java SE Subscription – currently 2000 kn (or up to 50% less)
• Combines Java SE Licensing and Support for use on Desktops, Servers or Cloud
deployments
• 1 Year Term Subscription
• Metric: Processor
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 46
Is Java really "Moving Forward Faster"?
• Community opinion: well… yeah! 
• Much more frequent Java releases
• Faster access to new features
• Many new improvement ideas
• A lot of maintenance and housekeeping
• Java still remains free
Looking forward to new things!
www.hujak.hr 47HUJAK - B. Mihaljević, A. Radovan, M. Žagar
What is our advice?
• Obviously – use Java 11 LTS
or use Java 13+ 
• OpenJDK (any) or Oracle JDK or any other –
it's up to you 
• Try to abandon older versions (Java 7 and 8)
• Check what is @Deprecated
• Migrate every 3-6 months or 3 years (with LTS)
• Get involved more with HUJAK!
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 48
OK, but what do we use in reality?
• Several relevant surveys:
• The State of Java in 2019 by Baeldung
• 6707 developers, Oct 2019
• JVM Ecosystem Report 2020 by snyk
• 2000 responses in Sep-Dec 2019
• 2020 Java Developer Productivity Report by Jrebel
• 399 responses Sep-Nov 2019
• Java Survey 2020 by HUJAK 
• 45+ responses in Feb 2020
• THANK YOU 
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 49
HUJAK's Java Survey 2020 – who?
• How many years of experience do you have in software development?
• What is your education level?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 50
HUJAK's Java Survey 2020 – job & company
• What is the name (or best description) of your job position?
• Where do you work?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 51
HUJAK's Java Survey 2020 – devs & apps
• How many software developers are in your company?
• What kind of applications (or projects)
do you develop?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 52
Versions of Java
• Java platform versions used in projects
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 53
31.8%
81.8%
6.8%
6.8%
45.5%
9.1%
6.8%
8.2%
79.8%
2.7%
1.8%
21.5%
4.5%
7.0%
58.4%
22.6%
5.5%
0% 20% 40% 60% 80% 100%
Java 7 or older
Java 8
Java 9
Java 10
Java 11
Java 12
Java 13
JRebel
Baeldung
HUJAK
What about New Releases?
• What is your approach to adopting new Java releases in production?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 54
70.5%
18.2%
2.3%
9.1%
55%
22%
11%
12%
0% 20% 40% 60% 80%
Stay with Long-Term Support
Will decide later
Always the latest
Don't know snyk
HUJAK
What about New Releases? #2
• If you are not using the most recent version of Java, what are the reasons?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 55
54.5%
36.4%
31.8%
13.6%
6.8%
2.3%
2.3%
51%
32%
27%
30%
10%
-10% 10% 30% 50% 70%
Our current set up works fine
Migration cost is too high
Now new features we need
Can't agree to migrate
Release cadence doesn't work for us
Libraries
Deadlines snyk
HUJAK
Which JDK?
• Which Java vendor's JDK do you currently use in production?
• Are you paying a vendor for JDK support? 2% Yes, 73% No, 25% Don't know
• Will you consider paying for JDK support in the future? 16% Yes, 41% No, 43% Don't know
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 56
0.0%
4.5%
9.1%
6.8%
15.9%
38.6%
56.8%
4%
4%
19%
24%
15%
34%
0% 20% 40% 60%
Azul Zulu
Amazon Corretto
Some other OpenJDK
GraalVM
AdoptOpenJDK
Oracle OpenJDK
Oracle JDK
snyk
HUJAK
Other languages
• Did you actively use other programming languages lately?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 57
2.6%
5.1%
5.1%
7.7%
7.7%
10.3%
17.9%
17.9%
20.5%
28.2%
28.2%
64.1%
9%
5%
5%
22%
62%
0% 20% 40% 60%
TypeScript
Dart
Scala
Go
C
PHP
Groovy
C#
C++
Kotlin
Python
JavaScript
snyk
HUJAK
Modules
• Are you using (or planning to use) Java modules in your Java applications?
HUJAK snyk
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 58
Yes,
15.90%
No, but we
plan to, 9.10%
Don't know
yet, 59.10%
No, 15.90%
Yes,
7.00%
No, but we
plan to,
29.00%
No, 64.00%
Enterprise Java
• Do you use Enterprise Java (J2EE, Java EE, Jakarta EE)?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 59
Yes,
directly,
13.60%
Yes, via framework,
63.60%
No,
22.70%
4.8%
35.7%
2.4%
11.9%
33.3%
45.2%
21%
4%
9%
29%
37%
0% 20% 40%
None
Don't know
Java EE 5 or earlier
Java EE 6
Java EE 7
Java EE 8
snyk
HUJAK
Server-side Frameworks
• Which server-side frameworks do you use?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 61
2.3%
2.3%
2.3%
4.7%
4.7%
9.3%
27.9%
53.5%
76.7%
3%
3%
5%
3%
5%
11%
31%
50%
0% 20% 40% 60% 80%
Grails
JHipster
Vert.x
GWT
Quarkus
Vaadin
JSF
Spring MVC
Spring Boot
snyk
HUJAK
Client-side Frameworks
• Which client-side frameworks do you use?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 62
17.8%
8.9%
2.2%
11.1%
15.6%
17.8%
33.3%
46.7%
20%
2%
11%
31%
28%
38%
0% 20% 40% 60% 80%
We don't have it
We use our own
Backbone
Vue
Node.js
React
jQuery
Angular
snyk
HUJAK
Libraries
• Which libraries do you use commonly?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 63
IDEs and Editors
• Which IDEs or editors do you use?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 64
Profilers
• Which profilers do you use?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 65
Virtualization environments & tools
• Which virtualization environments and tools or containers do you use?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 66
App Servers
• Which app servers you use?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 67
Going Microservices?
• Do you use microservices architecture?
• If you use microservices,
is this making development easier?
48,5% Yes; 36,4% It's the same; 15,2% No
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 68
Going agile?
• Do you use agile methodologies?
• If you do not use agile methodologies, do you intend to?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 69
Yes,
73.30
%
No, 26.70%
Yes,
72.40
%
No, 27.60%
Conferences
• Have you ever attended a Java-related conference?
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 70
Conference topics & speakers
• Do you want more foreign or domestic speakers at our Java conferences?
• 88,4% It does not matter if presentation is of a high quality; 11,6% Foreign
• Which topics you would like to hear more about?
• Microservices
• Quarkus, Graal VM, Clean Design, TDD, Agile, Kanban, IoT
• Spring, SQL
• Spring, Angular, Java
• Microservice patterns, GraalVM, reactive programming
• DDD, reactive systems, microservice architectures
• Designs patterns, DDD vs TDD vs xDD
• Best practices and real life stories with Legacy projects
• Experiences with moving old projects to newer platform/framework
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 71
Where can you learn Java?
• On every major university in the world
• On all major online learning and MOOC platforms
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 72
&
What about learning Java in Croatia?
• You can learn Java practically in each and every computing / computer science /
information technology university and/or college study program in Croatia
• Java is #1 introductory programming language for decades! 
• In 18+ cities: Bjelovar, Čakovec, Dubrovnik, Krapina,
Križevci, Osijek, Pula, Rijeka, Sisak, Split, Šibenik,
Varaždin, Velika Gorica, Virovitica, Zabok, Zadar,
Zagreb, and Zaprešić
• On 37 or more educational institutions including
7 public universities and 15 private colleges
• In 80 or more educational programs
(BS, MS, spec, PhD)
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 73
Source: Gdje studirati računarstvo i informatiku u Hrvatskoj?, www.bug.hr/obrazovanje/gdje-studirati-informatiku-u-hrvatskoj-2018-4185, Bug, 2018.
Instead of conclusion…
Let's do another great #Java adventure
JavaCro'20
May 10-12, 2020, Rovinj
Warm welcome
from HUJAK
and CroDuke!
www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 74
Thank you & greetings from HUJAK!
• Web page hujak.hr
• www.hujak.hr
• LinkedIn group HUJAK
• www.linkedin.com/groups?gid=4320174
• Facebook group page HUJAK.hr
• www.facebook.com/HUJAK.hr
• Twitter profile @HUJAK_hr
• twitter.com/HUJAK_hr
www.hujak.hr 75HUJAK - B. Mihaljević, A. Radovan, M. Žagar

More Related Content

What's hot

What's Coming in Java EE 8
What's Coming in Java EE 8What's Coming in Java EE 8
What's Coming in Java EE 8PT.JUG
 
How to Prepare for the OCPJP 8 Exam?
How to Prepare for the OCPJP 8 Exam?How to Prepare for the OCPJP 8 Exam?
How to Prepare for the OCPJP 8 Exam?Ganesh Samarthyam
 
Free community with deep roots
Free community with deep rootsFree community with deep roots
Free community with deep rootsMartijn Verburg
 
Java EE 8: On the Horizon
Java EE 8:  On the HorizonJava EE 8:  On the Horizon
Java EE 8: On the HorizonJosh Juneau
 
EE4J: Java EE & Jakarta EE JFR & JMC
EE4J: Java EE & Jakarta EE  JFR & JMCEE4J: Java EE & Jakarta EE  JFR & JMC
EE4J: Java EE & Jakarta EE JFR & JMCM. Fevzi Korkutata
 
JDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKJDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKWolfgang Weigend
 
Seven Points for Applying Java EE 7
Seven Points for Applying Java EE 7Seven Points for Applying Java EE 7
Seven Points for Applying Java EE 7Hirofumi Iwasaki
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules uploadRyan Cuprak
 
Java EE Revisits GoF Design Patterns
Java EE Revisits GoF Design PatternsJava EE Revisits GoF Design Patterns
Java EE Revisits GoF Design PatternsMurat Yener
 
HTTP/2 comes to Java. What Servlet 4.0 means to you. DevNexus 2015
HTTP/2 comes to Java.  What Servlet 4.0 means to you. DevNexus 2015HTTP/2 comes to Java.  What Servlet 4.0 means to you. DevNexus 2015
HTTP/2 comes to Java. What Servlet 4.0 means to you. DevNexus 2015Edward Burns
 
Have You Seen Java EE Lately?
Have You Seen Java EE Lately?Have You Seen Java EE Lately?
Have You Seen Java EE Lately?Reza Rahman
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Ryan Cuprak
 
Highlights from Java 10-13 and Future of Java at JCON 2019 by Alukhanov and K...
Highlights from Java 10-13 and Future of Java at JCON 2019 by Alukhanov and K...Highlights from Java 10-13 and Future of Java at JCON 2019 by Alukhanov and K...
Highlights from Java 10-13 and Future of Java at JCON 2019 by Alukhanov and K...Vadym Kazulkin
 
Java 9 Module System Introduction
Java 9 Module System IntroductionJava 9 Module System Introduction
Java 9 Module System IntroductionDan Stine
 
What's New in WebLogic 12.1.3 and Beyond
What's New in WebLogic 12.1.3 and BeyondWhat's New in WebLogic 12.1.3 and Beyond
What's New in WebLogic 12.1.3 and BeyondOracle
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Ryan Cuprak
 

What's hot (20)

What's Coming in Java EE 8
What's Coming in Java EE 8What's Coming in Java EE 8
What's Coming in Java EE 8
 
Java 9 preview
Java 9 previewJava 9 preview
Java 9 preview
 
How to Prepare for the OCPJP 8 Exam?
How to Prepare for the OCPJP 8 Exam?How to Prepare for the OCPJP 8 Exam?
How to Prepare for the OCPJP 8 Exam?
 
GWT-Basics
GWT-BasicsGWT-Basics
GWT-Basics
 
Free community with deep roots
Free community with deep rootsFree community with deep roots
Free community with deep roots
 
Java EE 8: On the Horizon
Java EE 8:  On the HorizonJava EE 8:  On the Horizon
Java EE 8: On the Horizon
 
EE4J: Java EE & Jakarta EE JFR & JMC
EE4J: Java EE & Jakarta EE  JFR & JMCEE4J: Java EE & Jakarta EE  JFR & JMC
EE4J: Java EE & Jakarta EE JFR & JMC
 
Java EE 8
Java EE 8Java EE 8
Java EE 8
 
JDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKJDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDK
 
Seven Points for Applying Java EE 7
Seven Points for Applying Java EE 7Seven Points for Applying Java EE 7
Seven Points for Applying Java EE 7
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
 
Java EE Revisits GoF Design Patterns
Java EE Revisits GoF Design PatternsJava EE Revisits GoF Design Patterns
Java EE Revisits GoF Design Patterns
 
HTTP/2 comes to Java. What Servlet 4.0 means to you. DevNexus 2015
HTTP/2 comes to Java.  What Servlet 4.0 means to you. DevNexus 2015HTTP/2 comes to Java.  What Servlet 4.0 means to you. DevNexus 2015
HTTP/2 comes to Java. What Servlet 4.0 means to you. DevNexus 2015
 
Have You Seen Java EE Lately?
Have You Seen Java EE Lately?Have You Seen Java EE Lately?
Have You Seen Java EE Lately?
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]
 
Highlights from Java 10-13 and Future of Java at JCON 2019 by Alukhanov and K...
Highlights from Java 10-13 and Future of Java at JCON 2019 by Alukhanov and K...Highlights from Java 10-13 and Future of Java at JCON 2019 by Alukhanov and K...
Highlights from Java 10-13 and Future of Java at JCON 2019 by Alukhanov and K...
 
Java 9 Module System Introduction
Java 9 Module System IntroductionJava 9 Module System Introduction
Java 9 Module System Introduction
 
What's New in WebLogic 12.1.3 and Beyond
What's New in WebLogic 12.1.3 and BeyondWhat's New in WebLogic 12.1.3 and Beyond
What's New in WebLogic 12.1.3 and Beyond
 
01 java intro
01 java intro01 java intro
01 java intro
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)
 

Similar to THE STATE OF JAVA TODAY AND TOMORROW

Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"GlobalLogic Ukraine
 
Jozi-JUG JDK 9 Unconference
Jozi-JUG JDK 9 UnconferenceJozi-JUG JDK 9 Unconference
Jozi-JUG JDK 9 UnconferenceHeather VanCura
 
JCConf 2018 - Retrospect and Prospect of Java
JCConf 2018 - Retrospect and Prospect of JavaJCConf 2018 - Retrospect and Prospect of Java
JCConf 2018 - Retrospect and Prospect of JavaJoseph Kuo
 
Gustavo Garnica: Evolución de la Plataforma Java y lo que Significa para Ti
Gustavo Garnica: Evolución de la Plataforma Java y lo que Significa para TiGustavo Garnica: Evolución de la Plataforma Java y lo que Significa para Ti
Gustavo Garnica: Evolución de la Plataforma Java y lo que Significa para TiSoftware Guru
 
The Evolution of Java
The Evolution of JavaThe Evolution of Java
The Evolution of JavaFu Cheng
 
Whats new in Java 9,10,11,12
Whats new in Java 9,10,11,12Whats new in Java 9,10,11,12
Whats new in Java 9,10,11,12Rory Preddy
 
Join the Java Evolution GIDS Bangalore & Pune
Join the Java Evolution GIDS Bangalore & PuneJoin the Java Evolution GIDS Bangalore & Pune
Join the Java Evolution GIDS Bangalore & PuneHeather VanCura
 
Deep Learning for Java Developer - Getting Started
Deep Learning for Java Developer - Getting StartedDeep Learning for Java Developer - Getting Started
Deep Learning for Java Developer - Getting StartedSuyash Joshi
 
Valencia EMEA Java User Group Summit
Valencia EMEA Java User Group SummitValencia EMEA Java User Group Summit
Valencia EMEA Java User Group SummitHeather VanCura
 
Java Is Still Free
Java Is Still FreeJava Is Still Free
Java Is Still FreeSimon Ritter
 
Explore the history, versions and features of Java- a report by Pranav Mishra
Explore the history, versions and features of Java- a report by Pranav MishraExplore the history, versions and features of Java- a report by Pranav Mishra
Explore the history, versions and features of Java- a report by Pranav MishraSopra Steria India
 
JDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUGJDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUGYuji Kubota
 
Java user group 2015 02-09-java8
Java user group 2015 02-09-java8Java user group 2015 02-09-java8
Java user group 2015 02-09-java8Marc Tritschler
 

Similar to THE STATE OF JAVA TODAY AND TOMORROW (20)

JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
 
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
 
Above and Beyond JDK 9, 10, 11, 12... - Branko Mihaljević and Martin Žagar on...
Above and Beyond JDK 9, 10, 11, 12... - Branko Mihaljević and Martin Žagar on...Above and Beyond JDK 9, 10, 11, 12... - Branko Mihaljević and Martin Žagar on...
Above and Beyond JDK 9, 10, 11, 12... - Branko Mihaljević and Martin Žagar on...
 
Java platform
Java platformJava platform
Java platform
 
Java 9 sneak peek
Java 9 sneak peekJava 9 sneak peek
Java 9 sneak peek
 
Jozi-JUG JDK 9 Unconference
Jozi-JUG JDK 9 UnconferenceJozi-JUG JDK 9 Unconference
Jozi-JUG JDK 9 Unconference
 
JCConf 2018 - Retrospect and Prospect of Java
JCConf 2018 - Retrospect and Prospect of JavaJCConf 2018 - Retrospect and Prospect of Java
JCConf 2018 - Retrospect and Prospect of Java
 
Gustavo Garnica: Evolución de la Plataforma Java y lo que Significa para Ti
Gustavo Garnica: Evolución de la Plataforma Java y lo que Significa para TiGustavo Garnica: Evolución de la Plataforma Java y lo que Significa para Ti
Gustavo Garnica: Evolución de la Plataforma Java y lo que Significa para Ti
 
Javantura v3 - The story of Java & HUJAK
Javantura v3 - The story of Java & HUJAKJavantura v3 - The story of Java & HUJAK
Javantura v3 - The story of Java & HUJAK
 
The Evolution of Java
The Evolution of JavaThe Evolution of Java
The Evolution of Java
 
Whats new in Java 9,10,11,12
Whats new in Java 9,10,11,12Whats new in Java 9,10,11,12
Whats new in Java 9,10,11,12
 
Join the Java Evolution GIDS Bangalore & Pune
Join the Java Evolution GIDS Bangalore & PuneJoin the Java Evolution GIDS Bangalore & Pune
Join the Java Evolution GIDS Bangalore & Pune
 
Deep Learning for Java Developer - Getting Started
Deep Learning for Java Developer - Getting StartedDeep Learning for Java Developer - Getting Started
Deep Learning for Java Developer - Getting Started
 
Valencia EMEA Java User Group Summit
Valencia EMEA Java User Group SummitValencia EMEA Java User Group Summit
Valencia EMEA Java User Group Summit
 
Java Is Still Free
Java Is Still FreeJava Is Still Free
Java Is Still Free
 
Explore the history, versions and features of Java- a report by Pranav Mishra
Explore the history, versions and features of Java- a report by Pranav MishraExplore the history, versions and features of Java- a report by Pranav Mishra
Explore the history, versions and features of Java- a report by Pranav Mishra
 
Java 9 and Project Jigsaw
Java 9 and Project JigsawJava 9 and Project Jigsaw
Java 9 and Project Jigsaw
 
JDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUGJDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUG
 
JSON-B for CZJUG
JSON-B for CZJUGJSON-B for CZJUG
JSON-B for CZJUG
 
Java user group 2015 02-09-java8
Java user group 2015 02-09-java8Java user group 2015 02-09-java8
Java user group 2015 02-09-java8
 

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association (20)

Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan LozićJavantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
 
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
 
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander RadovanJavantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
 
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
 
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
 
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
 
Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...
 
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej VidakovićJavantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
 
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
 
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
 
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
 
Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...
 
Javantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela PetracJavantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela Petrac
 
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje RuhekJavantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
 
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
 
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario KusekJavantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
 
Javantura v6 - JDK 11 & JDK 12 - Dalibor Topic
Javantura v6 - JDK 11 & JDK 12 - Dalibor TopicJavantura v6 - JDK 11 & JDK 12 - Dalibor Topic
Javantura v6 - JDK 11 & JDK 12 - Dalibor Topic
 
Javantura v6 - Java SE, Today and Tomorrow - Dalibor Topic
Javantura v6 - Java SE, Today and Tomorrow - Dalibor TopicJavantura v6 - Java SE, Today and Tomorrow - Dalibor Topic
Javantura v6 - Java SE, Today and Tomorrow - Dalibor Topic
 
Javantura v6 - Future of the Humankind and the Universe - Ivica Puljak
Javantura v6 - Future of the Humankind and the Universe - Ivica PuljakJavantura v6 - Future of the Humankind and the Universe - Ivica Puljak
Javantura v6 - Future of the Humankind and the Universe - Ivica Puljak
 
Javantura v4 - Self-service app deployment with Kubernetes and OpenShift - Ma...
Javantura v4 - Self-service app deployment with Kubernetes and OpenShift - Ma...Javantura v4 - Self-service app deployment with Kubernetes and OpenShift - Ma...
Javantura v4 - Self-service app deployment with Kubernetes and OpenShift - Ma...
 

Recently uploaded

Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sectoritnewsafrica
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessWSO2
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFMichael Gough
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Mark Simos
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 

Recently uploaded (20)

Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with Platformless
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDF
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 

THE STATE OF JAVA TODAY AND TOMORROW

  • 1. dr. sc. Branko Mihaljević Aleksander Radovan doc. dr. sc. Martin Žagar Stjepan Matijašević HUJAK www.hujak.hr 1HUJAK - B. Mihaljević, A. Radovan, M. Žagar The State of Java Today and Tomorrow
  • 2. • #1 Development Platform • Continued growth of Java for 24+ years • #1 Programming Language • For Cloud, Big Data, and DevOps • A Few Dozen Billion Devices run Java • 10 Million Java Developers • Many have Java Certificates • 50+ JVM languages (and even more with GraalVM+Truffle+Sulong) • JVM languages include: Groovy, Kotlin, Scala, Clojure, JRuby, Jython, Fantom, Ceylon, Xtend, X10, LuaJ, Golo, Frege, Mirah, Eta and JavaScript So, what is Java … for us, developers? www.hujak.hr 2HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 3. Current State of Java? • Some questions for you: • Are you still using Java 8 (or 7, or 6, or …)? • Did you use Java 9 (or 10)? • Started using the LTS version Java 11? • Upgraded to the latest Java 13? • What about Java Jakarta EE? www.hujak.hr 3HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 4. "Moving Java Forward Faster" www.hujak.hr 4 20191995 1998 2001 2004 2007 2010 20222016 2018-03-20 2017-09-21 2014-03-18 Java EE 7 2013-06-12 HUJAK 2011-12-132011-07-28 Java EE 6 2009-12-10 Java SE 6 Mustang 2006-12-11 Java EE 5 2006-05-11 Java 5 J2SE 5.0 Tiger 2004-10-04 J2EE 1.4 2003-11-11 Java 1.4 J2SE 1.4 Merlin 2002-02-06 J2EE 1.3 2001-09-24 Java 1.3 J2SE 1.3 Kestrel 2000-05-08 J2EE 1.2 1999-12-12 Java 1.2 J2SE 1.2 Playground 1998-12-08 JPE Java Professional Edition 1998-05 Java 1.1 JDK 1.1 1997-02-19 Java 1 JDK 1.0 Oak Java JDK Alpha- Beta 1995 © 2020, HUJAK 2010-01-27 Java SE 7 Dolphin Java SE 8 Spider Java EE 8 2017-09-21 2013 1996-01-23 2018-09-25 2019-03-19 2019-09-17 2020-03-17 2020-09 2021-03 2021-09 Jakarta EE Eclipse Foundation HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 5. How is Java currently holding? • TIOBE index for February 2020 www.hujak.hr 5HUJAK - B. Mihaljević, A. Radovan, M. Žagar Rank Language Ratings 1 Java 17.358% 2 C 16.766% 3 Python 9.345% 4 C++ 6.164% 5 C# 5.927% Source: TIOBE Index for February 2020, www.tiobe.com/tiobe-index/
  • 6. What about Java download? • When you type "Java download" in Google you'll probably get www.java.com • And you can download the "latest" JRE  Java 8 Update 241 from January 14, 2020 • OK, but what about the real latest JDK download(s)? www.hujak.hr 6HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 7. Available JDKs • Oracle JDK www.oracle.com/technetwork/java/javase/downloads/ • Oracle Technology Network (OTN) License Agreement for Oracle Java SE or choose from many OpenJDKs: • Oracle OpenJDK jdk.java.net • GNU General Public License version 2 with the Classpath Exception (GPLv2+CE) • Java SE 13.0.2, Java SE 11.0.6 (LTS) or Java SE 8u241 (LTS) • AdoptOpenJDK's OpenJDK adoptopenjdk.net • Apache License, Version 2.0 and GPLv2+CE • OpenJDK 13.0.2+8, OpenJDK 11.0.6+10 (LTS), or OpenJDK 8u242 (LTS) on Hotspot JVM or OpenJ9 JVM • Azul's Zulu OpenJDK www.azul.com/downloads/zulu/ • From OpenJDK 13 back to Open JDK 6 for Windows, Linux, macOS and Solaris • Others: Amazon's Corretto OpenJDK (11 and 8), RedHat's OpenJDK, SAP's SapMachine OpenJDK, Alibaba Dragonwell, Linux distribution's OpenJDKs … www.hujak.hr 7HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 8. OpenJDK or Commercial JDK? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 8 All I'm offering is the truth – nothing more
  • 9. JDK 8 – ancient history • JDK 8 in March 2014 • We will not talk about JDK 8 anymore  • Ooops, are you still using it? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 9
  • 10. JDK 9 – very very old news? • JDK 9 in September 2017 • Many new features and APIs (after 3.5 years) • 90 JEPs included • Java Platform Module System (JPMS) • All core Java libraries are now modules (JEP 220) • 97 modules: 28 Java SE, 8 JavaFX, 59 JDK, 2 Oracle… • Encapsulation • Most internal APIs encapsulated (JEP 260) and analyzing dependencies (jdeps) • And … new release model www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 10
  • 11. OpenJDK Release Model • New Features included (only) when ready • Feature release versions released every 6 months (in March & September) • Update releases shipped quarterly (in January, April, July, and October) • Long-term support (LTS) feature release every 3 years • LTS for all releases is not practical • Updates available for at least 3 years • LTS versions: JDK 11 (September 2018), JDK 17 (September 2021), JDK 24 (2024) … www.hujak.hr 11HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 12. JDK 10 – it was new, and already old? • JDK 10 in March 2018 • 109 new features and APIs (after 6 months) • 12 JEPs included (only?) www.hujak.hr 12HUJAK - B. Mihaljević, A. Radovan, M. Žagar • 313: Remove the Native-Header Generation Tool (javah) • 314: Additional Unicode Language-Tag Extensions • 316: Heap Allocation on Alternative Memory Devices • 317: Experimental Java-Based JIT Compiler • 319: Root Certificates • 322: Time-Based Release Versioning • 286: Local-Variable Type Inference • 296: Consolidate the JDK Forest into a Single Repository • 304: Garbage-Collector Interface • 307: Parallel Full GC for G1 • 310: Application Class-Data Sharing • 312: Thread-Local Handshakes  vars
  • 13. Local Variable Type Inference (JEP 286) • Extending type inference to declarations of local variables and initializers • Static type safety with reduced ceremony associated with writing Java • Examples: var list = new ArrayList<String>(); // infers ArrayList<String> var stream = list.stream(); // infers Stream<String> var m = new HashMap <String, List<BigDecimal>>(); • Restricted to: local variables with initializers, indexes in the enhanced for- loop, locals declared in a traditional for-loop • Not available for: method parameters, constructor parameters, method return types, fields, catch formals or any other kind of variable declaration www.hujak.hr 13HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 14. JDK 11 – LTS version (finally) • JDK 11 in September 2018 • 90 new features and APIs! • LTS version (first in a long time, after JDK 8 in 2014) • 17 JEPs included: www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 14 • 181: Nest-Based Access Control • 309: Dynamic Class-File Constants • 315: Improve Aarch64 Intrinsics • 318: Epsilon: A No-Op Garbage Collector • 320: Remove the Java EE and CORBA Modules • 321: HTTP Client (Standard) • 323: Local-Variable Syntax for Lambda Parameters • 324: Key Agreement with Curve25519 and Curve448 • 327: Unicode 10 • 328: Flight Recorder • 329: ChaCha20 and Poly1305 Cryptographic Algorithms • 330: Launch Single-File Source-Code Programs • 331: Low-Overhead Heap Profiling • 332: Transport Layer Security (TLS) 1.3 • 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental) • 335: Deprecate the Nashorn JavaScript Engine • 336: Deprecate the Pack200 Tools and API
  • 15. New Garbage Collectors Many GCs to choose from: • Serial GC • Parallel GC (and Parallel Old GC) • CMS (Concurrent Mark and Sweep) GC (deprecated in Java 9) • G1 (Garbage-First) GC (default since Java 9) • Parallel Full GC for G1 (updated in Java 10) • Improved in Java 12+ • ZGC (experimental in Java 11, improved later) • Shenandoah GC (experimental in Java 12, improved) • Azul's C4 GC • Epsilon GC (no-op GC, experimental in Java 11) www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 15Image Source: 5 Coding Hacks to Reduce GC Overhead, Tall Weiss, OverOps, 2013
  • 16. JDK 12 • JDK 12 in March 2019 • 39 new features and APIs – relatively small number • 8 JEPs included: • 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) • 230: Microbenchmark Suite • 325: Switch Expressions (Preview) <– most interesting to developers • 334: JVM Constants API • 340: One AArch64 Port, Not Two • 341: Default CDS Archives • 344: Abortable Mixed Collections for G1 <– performance • 346: Promptly Return Unused Committed Memory from G1 <– performance www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 16
  • 17. What are Preview Features? • Preview language (or VM) features are fully implemented and fully specified, yet impermanent • Made available in a release to get real world use feedback from developers • To try out a preview feature it has to be enabled at compile time and at runtime • For example on JDK 13 you should use: javac --release 13 --enable-preview Foo.java java --enable-preview Foo • Note: You cannot enable preview features of previous JDK www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 17
  • 18. Switch Expressions (Preview) (JEP 325) • Extend switch statement so it can be used as a statement or an expression • Both can use either a "traditional" or "simplified" scoping and control flow behavior • "Simplified" switch form with "case L ->" switch labels • If a label is matched, then only the expression or statement to the right of an arrow label is executed – there is no fall through • Used also as an expression • Without fall through • Without default? • Note: Superseded by JEP 354 in JDK 13 www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 18
  • 19. Java 13 – the latest • JDK 13 in September 2019 • 81 new features and APIs – relatively small number • 5 JEPs included (only): • 350: Dynamic CDS Archives • 351: ZGC: Uncommit Unused Memory • 353: Reimplement the Legacy Socket API • 354: Switch Expressions (Preview) • 355: Text Blocks (Preview) www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 19
  • 20. Switch Expressions (Preview) (JEP 354) • Supersedes JEP 325 to extend switch so it can be used as either a statement or an expression • Both can use either traditional case ... : labels (with fall through) or new case ... -> labels (with no fall through) • Introduces new statement for yielding a value from a switch expression • Based on feedback on design and experience in JDK 12 to simplify everyday coding • Also to prepare the way for use of pattern matching (JEP 305) in switch • Note: This preview should be declared standard in JEP 361 www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 20
  • 21. Text Blocks (Preview) (JEP 355) • Add text blocks to the Java language • A text block is a multi-line string literal that • Avoids the need for most escape sequences • Automatically formats the string in a predictable way • Gives the developer control over format when desired • Follow-on effort to explorations begun in JEP 326 (Raw String Literals) • Goals • Easy to express strings that span several lines of source code (avoiding escape seqs) • Enhance readability of non-Java code embedded in Java programs as strings • Support migration from string literals www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 21
  • 22. Text Blocks – examples • SQL example using a "two-dimensional" block of text String query = """ SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB` WHERE `CITY` = 'INDIANAPOLIS' ORDER BY `EMP_ID`, `LAST_NAME`; """; • Polyglot language example using a "two-dimensional" block of text ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); Object obj = engine.eval(""" function hello() { print('"Hello, world"'); } hello(); """);www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 22
  • 23. JDK 14 – Final Release Candidate • JDK 14 in March 17, 2020 • New features and APIs at openjdk.java.net/projects/jdk/14/ • JDK 14 Early-Access Builds at jdk.java.net/14/ • 16 JEPs targeted: www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 24 • 305: Pattern Matching for instanceof (Preview) • 343: Packaging Tool (Incubator) • 345: NUMA-Aware Memory Allocation for G1 • 349: JFR Event Streaming • 352: Non-Volatile Mapped Byte Buffers • 358: Helpful NullPointerExceptions • 359: Records (Preview) • 361: Switch Expressions (Standard) • 362: Deprecate the Solaris and SPARC Ports • 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector • 364: ZGC on macOS • 365: ZGC on Windows • 366: Deprecate the ParallelScavenge + SerialOld GC Combination • 367: Remove the Pack200 Tools and API • 368: Text Blocks (Second Preview) • 370: Foreign-Memory Access API (Incubator)
  • 24. Garbage Collectors improvements • NUMA-Aware Memory Allocation for G1 (JEP 345) • Improve G1 performance on large machines by implementing NUMA-aware memory allocation • Remove the Concurrent Mark Sweep (CMS) Garbage Collector (JEP 363) • ZGC on macOS (JEP 364) • Port the ZGC garbage collector to macOS • ZGC on Windows (JEP 365) • Port the ZGC garbage collector to Windows • Deprecate the ParallelScavenge + SerialOld GC Combination (JEP 366) • A combination of GC algorithms that is very little used but requires a significant amount of maintenance effort – the parallel young generation GC and the serial old GC www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 25
  • 25. Many language-related features • Pattern Matching for instanceof (Preview) (JEP 305) • Records (Preview) (JEP 359) • Switch Expressions (Standard) (JEP 361) • Text Blocks (Second Preview) (JEP 368) www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 26
  • 26. New Tools • Packaging Tool (JEP 343) • jpackage – new tool for packaging self-contained Java applications • Implementation at jdk.java.net/jpackage/ • Takes a Java runtime and your application, and creates a native distributable package • Can be used for desktop and command line apps inj JDK 11+ • Supports Linux (rpm, deb), Mac (dmg, pkg) and Windows (exe, msi) • jpackage runs jlink to create runtime, including application if modular • Note: there was javapackager tool in JDK 8 with JavaFX (removed) • JFR Event Streaming (JEP 349) • Expose JDK Flight Recorder data for continuous monitoring www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 27
  • 27. Helpful NullPointerExceptions (JEP 358) • Improve the usability of NullPointerExceptions (NPEs) generated by the JVM by describing precisely which variable was null • Offers helpful information to developers and support about the premature termination • Improves program understanding by more clearly associating a dynamic exception with static program code • Computed at runtime through bytecode access path analysis • Reduces the confusion and concern that new developers often have about NullPointerExceptions • Instead of not very useful Exception in thread "main" java.lang.NullPointerException at Prog.main(Prog.java:5) • We can use… www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 28
  • 28. Helpful NullPointerExceptions – examples • Example: a.i = 99; could generate the message Exception in thread "main" java.lang.NullPointerException: Cannot assign field 'i' because 'a' is null. • Example: a.b.c.i = 99; could generate the message Exception in thread "main" java.lang.NullPointerException: Cannot read field 'c' because 'a.b' is null. • Example: a[i][j][k] = 99; could generate the message Exception in thread "main" java.lang.NullPointerException: Cannot load from object array because 'a[i][j]' is null. • Example: a.i = b.j; could generate the message Exception in thread "main" java.lang.NullPointerException: Cannot read field 'j' because 'b' is null. www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 29
  • 29. JDK 15 – in Early Access • JDK 15 in September 2020 • New features and APIs at openjdk.java.net/projects/jdk/15/spec/ • JDK 15 Early-Access Builds available at jdk.java.net/15/ • No JEPs targeted (so far)  www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 30
  • 30. Programming Polyglotism & other trends • Polyglot programming problems: • Cross-language interoperability • General-purpose programming languages not-so-good performance • Language tools – configuration, debugging… • New ideas: • Project Maxine with OOP compiler • OpenJDK's Project Metropolis with GraalVM • GraalVM – high-performance embeddable polyglot virtual machine that enables you to combine different programming languages that incur almost no overhead • In the JVM, into standalone native image, or embedded into large application • + Quarkus: Kubernetes Native Java stack tailored for GraalVM & OpenJDK HotSpot www.hujak.hr 31HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 31. GraalVM – architecture • JVM – HotSpot VM or other • JVM Compiler Interface (JVMCI) – optimizing compiler • Graal Compiler – new optimized compiler for JVM languages • Truffle framework – any other language • Sulong (LLVM) – high- performance Low- Level Virtual Machine bitcode interpreter • + Native images with Substrate VM www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 32
  • 32. More Long-term Java Future • Project Amber – incubator for smaller, productivity-oriented language features and simplifying syntax • Project Valhalla – incubator project for advanced JVM and language feature candidates • Project Panama – to interconnect JVM and native code • Project Loom – to reduce complexity in writing concurrent applications • Project Metropolis – JVM re-written in Java, i.e. "Java on Java" • Project Skara – alternative SCM & code review for JDK (Git) www.hujak.hr 33HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 33. Project Amber • Right-sizing language ceremony • Local-Variable Type Inference (var) (JEP 286) – in JDK 10 • Local Variable Syntax for Lambda Parameters (JEP 323) – in JDK 11 • Switch Expressions (JEP 325, JEP 354, JEP 361) – expressions in switch statements and lambdas – (in JDK 12 and JDK 13 as preview, in JDK 14 as standard) • Text Blocks (JEP 355) – (in JDK 13 as a preview, in JDK14 a second preview) • Pattern Matching for instanceof (JEP 305) – switch statement with case for different types of objects (in JDK14 as preview) • Java Compiler Intrinsics for JDK APIs (JEP 348) – in progress • On hold / withdrawn: • Lambda Leftovers (JEP 302) – (on hold) • Enhanced Enums (JEP 301) – generic enums with type parameters (on hold) • Raw string literals (JEP 326) – use of single backquote (withdrawn) • More at openjdk.java.net/projects/amber/www.hujak.hr 34HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 34. Project Valhalla • Incubator project for advanced Java VM and language feature candidates • Problem: • Primitives for performance and objects for OO, encapsulation, polymorphism, inheritance… • But still, there is no ArrayList<int>  • If we use Integer than (un)boxing, creation of object, heap, indirection reference… • Value Objects (JEP 169) – "codes like a class, works like a primitive" • Supports methods, fields, implements interface, encapsulation, generic… • Doesn't support mutation or sub-classes • Generics over Primitive Types (JEP 218) – extends generic types to support the specialization of generic classes and interfaces over primitive types • More at openjdk.java.net/projects/valhalla/ www.hujak.hr 35HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 35. Value Types • Value types represent pure data aggregates, dropping the features of regular objects • Pure data, without identity • Equality comparison based on state • No representational polymorphism or immutable or non-nullable objects • Enables passing value types on the stack instead of having to allocate them on the heap • Getting data aggregates that have runtime behavior similar to Java primitives, such as int or float  • However, value types can have methods and fields • Faster and smaller objects and user-defined primitives? • We can use value types as generic types without boxing • This directly leads us to the other big project: specialized generics www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 36
  • 36. Specialized Generics • Generification over language primitives – we currently use boxed types, such as Integer for int or Float for float • This boxing creates an additional layer of indirection, thereby defeating the purpose of using primitives for performance enhancement in the first place • Therefore, we see many dedicated specializations for primitive types in existing frameworks and libraries, like IntStream<T> or ToIntFunction<T> • Keeping the performance improvement of using primitives • So, specialized generics is an effort to remove the needs for those “hacks” • Instead, the Java language strives to enable generic types for basically everything: object references, primitives, value types, and maybe even void www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 37
  • 37. Project Panama • Interconnecting JVM and native code • Featuring native function calling and native data access from the JVM • Foreign function interface (FFI) as a simple, safe and performant replacement for JNI, includes: • Native function calling from JVM (C, C++) • Native data access from JVM or inside JVM heap • Native library management APIs and native-oriented JIT optimizations • Access to low-level hardware functionality from Java (vector instructions, special memory types)? • Big Data, Machine Learning? www.hujak.hr 38HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 38. Project Loom • Threads cannot match the scale of the domain’s unit of concurrency • Millions of transactions, users or sessions – number of OS threads is much less • Most concurrent applications need some synchronization between threads • An expensive context switch between OS threads • Project Loom – reducing complexity in writing concurrent applications • Alternative, user-mode thread implementations, delimited continuations, and other constructs involving call-stack manipulation • Proposal for lightweight JVM-level threads called fibres as alternative implementation of threads • Managed by schedulers like ForkJoinPool, written in Java • Millions of fibres spawned in a single JVM instance • Ordinary Java threads preserved, performance improved, and footprint reduced • Less memory and almost zero overhead when task switching www.hujak.hr 39HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 39. New Java 11 Certifications • OCP Java SE 11 Developer Certification (finally ) • With two exams! • There is no longer OCA for Java SE • Java SE 11 Programmer I – Exam 1Z0-815 • Questions: 80, Duration: 180 minutes, Passing score: 63% • Java SE 11 Programmer II – Exam 1Z0-816 • Questions: 80, Duration: 180 minutes, Passing score: 63% • Guide: Java SE 11 Certification Questions Answered • www.oracle.com/a/ocom/docs/dc/ou-5021-java-se11-faq-4.pdf • To get a certificate you need both exams passed! • Price: each exams is approx. 1500 HRK www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 40
  • 40. Upgrade to Java 11 Certifications • If you have OCP/OCA/SCP Java SE 6, 7 or 8: • Upgrade OCP Java 6, 7 & 8 to Java SE 11 Developer – Exam 1Z0-817 • Questions: 58, Duration: 120 minutes, Passing score: 61% • Upgrade OCA Java 5, 6, 7 & 8 to Java SE 11 Developer – Exam 1Z0-816 • Questions: 80, Duration: 180 minutes, Passing score: 63% • + Free video: Java 11 – New Features • For students only (JDK 8 only): • Java Foundations Certified Junior Associate Certification – Exam 1Z0-811 • Questions: 75, Duration: 150 minutes, Passing score: 65%, Price: approx. 600 HRK www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 41
  • 41. Java 11 OCP Books – thank you • 40% discount code – for all products in all formats, valid until April 22 ctwjavantura20 • Java SE 11 Programmer I Certification Guide – some free eBook codes at the closing ;-) • Great book by Mala Gupta • For the 1Z0-815 certification test with complete coverage of the exam • In Manning Early Access Program – currently 10 out of 14 chapters available • www.manning.com/books/java-se-11-programmer-i- certification-guide www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 42
  • 42. Other Java 11 OCP Books • New books by Jeanne Boyarsky & Scott Selikoff • Java OCP 11 Programmer I Study Guide 1Z0-815 in November 2019 • $35-$45 per book • Java OCP 11 Programmer II Study Guide 1Z0-816 not published yet, released in June 2020 • Set of both books Java OCP 11 Developer Complete Study Guide • More at www.selikoff.net/ocp11-1/ www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 43
  • 43. Various ways to get Java certificate • For students • From OCA • From OCP • From the scratch www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 44
  • 44. Is Java still "Free"? • For free use of OpenJDK with GPLv2+CE license • Updates refers to code patches – typically free of charge • Support means fixing bugs and answering questions – was never free of charge • LTS release every 3 years – does not automatically mean 3 years of free updates • Oracle JDK 11 (and onward) in production (only) with commercial Java SE subscription • Free JDK 11 (and later) are only OpenJDK binaries • However, Oracle JDK 8 can be used indefinitely for free • Without any further security patches and bug fixes www.hujak.hr 45HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 45. Java SE Subscriptions from Oracle • Oracle Java SE Desktop Subscription – currently 200 kn (or up to 50% less) • Combines Java SE Licensing and Support for use on Desktop deployments • 1 Year Term Subscription • Metric: Named User Plus • Oracle Java SE Subscription – currently 2000 kn (or up to 50% less) • Combines Java SE Licensing and Support for use on Desktops, Servers or Cloud deployments • 1 Year Term Subscription • Metric: Processor www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 46
  • 46. Is Java really "Moving Forward Faster"? • Community opinion: well… yeah!  • Much more frequent Java releases • Faster access to new features • Many new improvement ideas • A lot of maintenance and housekeeping • Java still remains free Looking forward to new things! www.hujak.hr 47HUJAK - B. Mihaljević, A. Radovan, M. Žagar
  • 47. What is our advice? • Obviously – use Java 11 LTS or use Java 13+  • OpenJDK (any) or Oracle JDK or any other – it's up to you  • Try to abandon older versions (Java 7 and 8) • Check what is @Deprecated • Migrate every 3-6 months or 3 years (with LTS) • Get involved more with HUJAK! www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 48
  • 48. OK, but what do we use in reality? • Several relevant surveys: • The State of Java in 2019 by Baeldung • 6707 developers, Oct 2019 • JVM Ecosystem Report 2020 by snyk • 2000 responses in Sep-Dec 2019 • 2020 Java Developer Productivity Report by Jrebel • 399 responses Sep-Nov 2019 • Java Survey 2020 by HUJAK  • 45+ responses in Feb 2020 • THANK YOU  www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 49
  • 49. HUJAK's Java Survey 2020 – who? • How many years of experience do you have in software development? • What is your education level? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 50
  • 50. HUJAK's Java Survey 2020 – job & company • What is the name (or best description) of your job position? • Where do you work? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 51
  • 51. HUJAK's Java Survey 2020 – devs & apps • How many software developers are in your company? • What kind of applications (or projects) do you develop? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 52
  • 52. Versions of Java • Java platform versions used in projects www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 53 31.8% 81.8% 6.8% 6.8% 45.5% 9.1% 6.8% 8.2% 79.8% 2.7% 1.8% 21.5% 4.5% 7.0% 58.4% 22.6% 5.5% 0% 20% 40% 60% 80% 100% Java 7 or older Java 8 Java 9 Java 10 Java 11 Java 12 Java 13 JRebel Baeldung HUJAK
  • 53. What about New Releases? • What is your approach to adopting new Java releases in production? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 54 70.5% 18.2% 2.3% 9.1% 55% 22% 11% 12% 0% 20% 40% 60% 80% Stay with Long-Term Support Will decide later Always the latest Don't know snyk HUJAK
  • 54. What about New Releases? #2 • If you are not using the most recent version of Java, what are the reasons? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 55 54.5% 36.4% 31.8% 13.6% 6.8% 2.3% 2.3% 51% 32% 27% 30% 10% -10% 10% 30% 50% 70% Our current set up works fine Migration cost is too high Now new features we need Can't agree to migrate Release cadence doesn't work for us Libraries Deadlines snyk HUJAK
  • 55. Which JDK? • Which Java vendor's JDK do you currently use in production? • Are you paying a vendor for JDK support? 2% Yes, 73% No, 25% Don't know • Will you consider paying for JDK support in the future? 16% Yes, 41% No, 43% Don't know www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 56 0.0% 4.5% 9.1% 6.8% 15.9% 38.6% 56.8% 4% 4% 19% 24% 15% 34% 0% 20% 40% 60% Azul Zulu Amazon Corretto Some other OpenJDK GraalVM AdoptOpenJDK Oracle OpenJDK Oracle JDK snyk HUJAK
  • 56. Other languages • Did you actively use other programming languages lately? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 57 2.6% 5.1% 5.1% 7.7% 7.7% 10.3% 17.9% 17.9% 20.5% 28.2% 28.2% 64.1% 9% 5% 5% 22% 62% 0% 20% 40% 60% TypeScript Dart Scala Go C PHP Groovy C# C++ Kotlin Python JavaScript snyk HUJAK
  • 57. Modules • Are you using (or planning to use) Java modules in your Java applications? HUJAK snyk www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 58 Yes, 15.90% No, but we plan to, 9.10% Don't know yet, 59.10% No, 15.90% Yes, 7.00% No, but we plan to, 29.00% No, 64.00%
  • 58. Enterprise Java • Do you use Enterprise Java (J2EE, Java EE, Jakarta EE)? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 59 Yes, directly, 13.60% Yes, via framework, 63.60% No, 22.70% 4.8% 35.7% 2.4% 11.9% 33.3% 45.2% 21% 4% 9% 29% 37% 0% 20% 40% None Don't know Java EE 5 or earlier Java EE 6 Java EE 7 Java EE 8 snyk HUJAK
  • 59. Server-side Frameworks • Which server-side frameworks do you use? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 61 2.3% 2.3% 2.3% 4.7% 4.7% 9.3% 27.9% 53.5% 76.7% 3% 3% 5% 3% 5% 11% 31% 50% 0% 20% 40% 60% 80% Grails JHipster Vert.x GWT Quarkus Vaadin JSF Spring MVC Spring Boot snyk HUJAK
  • 60. Client-side Frameworks • Which client-side frameworks do you use? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 62 17.8% 8.9% 2.2% 11.1% 15.6% 17.8% 33.3% 46.7% 20% 2% 11% 31% 28% 38% 0% 20% 40% 60% 80% We don't have it We use our own Backbone Vue Node.js React jQuery Angular snyk HUJAK
  • 61. Libraries • Which libraries do you use commonly? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 63
  • 62. IDEs and Editors • Which IDEs or editors do you use? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 64
  • 63. Profilers • Which profilers do you use? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 65
  • 64. Virtualization environments & tools • Which virtualization environments and tools or containers do you use? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 66
  • 65. App Servers • Which app servers you use? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 67
  • 66. Going Microservices? • Do you use microservices architecture? • If you use microservices, is this making development easier? 48,5% Yes; 36,4% It's the same; 15,2% No www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 68
  • 67. Going agile? • Do you use agile methodologies? • If you do not use agile methodologies, do you intend to? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 69 Yes, 73.30 % No, 26.70% Yes, 72.40 % No, 27.60%
  • 68. Conferences • Have you ever attended a Java-related conference? www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 70
  • 69. Conference topics & speakers • Do you want more foreign or domestic speakers at our Java conferences? • 88,4% It does not matter if presentation is of a high quality; 11,6% Foreign • Which topics you would like to hear more about? • Microservices • Quarkus, Graal VM, Clean Design, TDD, Agile, Kanban, IoT • Spring, SQL • Spring, Angular, Java • Microservice patterns, GraalVM, reactive programming • DDD, reactive systems, microservice architectures • Designs patterns, DDD vs TDD vs xDD • Best practices and real life stories with Legacy projects • Experiences with moving old projects to newer platform/framework www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 71
  • 70. Where can you learn Java? • On every major university in the world • On all major online learning and MOOC platforms www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 72 &
  • 71. What about learning Java in Croatia? • You can learn Java practically in each and every computing / computer science / information technology university and/or college study program in Croatia • Java is #1 introductory programming language for decades!  • In 18+ cities: Bjelovar, Čakovec, Dubrovnik, Krapina, Križevci, Osijek, Pula, Rijeka, Sisak, Split, Šibenik, Varaždin, Velika Gorica, Virovitica, Zabok, Zadar, Zagreb, and Zaprešić • On 37 or more educational institutions including 7 public universities and 15 private colleges • In 80 or more educational programs (BS, MS, spec, PhD) www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 73 Source: Gdje studirati računarstvo i informatiku u Hrvatskoj?, www.bug.hr/obrazovanje/gdje-studirati-informatiku-u-hrvatskoj-2018-4185, Bug, 2018.
  • 72. Instead of conclusion… Let's do another great #Java adventure JavaCro'20 May 10-12, 2020, Rovinj Warm welcome from HUJAK and CroDuke! www.hujak.hr HUJAK - B. Mihaljević, A. Radovan, M. Žagar 74
  • 73. Thank you & greetings from HUJAK! • Web page hujak.hr • www.hujak.hr • LinkedIn group HUJAK • www.linkedin.com/groups?gid=4320174 • Facebook group page HUJAK.hr • www.facebook.com/HUJAK.hr • Twitter profile @HUJAK_hr • twitter.com/HUJAK_hr www.hujak.hr 75HUJAK - B. Mihaljević, A. Radovan, M. Žagar

Editor's Notes

  1. https://www.slideshare.net/SimonRitter/jdk-9-10-11-and-beyond
  2. https://www.tiobe.com/tiobe-index/
  3. https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html : Intel 32- and 64-bit (Windows, MacOS, Linux), ARM, PowerPC, AIX, Solaris…
  4. You take the blue pill—the story ends, you wake up in your bed and believe whatever you want to believe. You take the red pill—you stay in Wonderland, and I show you how deep the rabbit hole goes. Remember: all I'm offering is the truth. Nothing more.
  5. https://www.surveymonkey.com/results/SM-FLWGS5PW/
  6. https://www.azul.com/90-new-features-and-apis-in-jdk-11/ http://openjdk.java.net/projects/jdk/11/
  7. https://dzone.com/articles/39-new-features-and-apis-in-jdk-12
  8. https://openjdk.java.net/jeps/12
  9. https://www.azul.com/81-new-features-and-apis-in-jdk-13/
  10. https://static.rainfocus.com/oracle/oow19/sess/1553286862574001UArp/PF/jpackage-final_1568812898078001LixV.pdf
  11. local-variable type inference, to decrease the ceremony associated writing Java code; enhanced enums, to improve expressiveness of the enum construct by allowing type variables in enums and performing sharper type-checking for enum constants; and lambda leftovers , to boost the usability of lambda and method references.
  12. https://www.baeldung.com/java-valhalla-project
  13. https://www.selikoff.net/2019/03/17/my-experience-taking-the-new-java-se-11-programmer-i-1z0-815-exam/ https://www.selikoff.net/2019/05/24/jeannes-experiences-taking-the-1z0-815-exam/
  14. https://shop.oracle.com/apex/f?p=DSTORE:2:::NO:RIR,RP,2:PROD_HIER_ID:123775488249871532594385
  15. OK
  16. More examples in Programmer's Guide To Text Blocks by Jim Laskey & Stuart Marks, August 2019, cr.openjdk.java.net/~jlaskey/Strings/TextBlocksGuide_v9.html
  17. https://blog.codefx.org/java/java-13-guide/ https://dzone.com/articles/81-new-features-and-apis-in-jdk-13 https://www.mkyong.com/java/what-is-new-in-java-13/