java.beans…), Java 5 (enumerated types, generics…), Java 6, 7, 8 (streams…), 9 (modules…) 10, 11…
Java positioning in programming languages competition
Ranking in 2022
Energy efficiency here…
Styles of programming
- Styles of programming pervade IT domains: business, embedded systems and infrastructures, pedagogy, science, Web… based on several programming paradigms:
- Imperative… versus declarative
- From event-based to asynchronous
- Functional (from LisP to lambda expressions)
- Logical (from Prolog to Drools)
- Object… versus structured… versus unstructured (from Simula 67 to AssemblyScript, Grain…)
- From parallel to concurrent
- Web (from network programming to the Internet of Things - IoT)
- Any other style?
Core and extended features of Java depend upon a Java Virtual Machine (JVM) version. For example, “streams” are supported from Java ver. 8. Picture shows JVM 8 that embeds a lot of technologies like SQL, XML, Web… whose functional interest in a specific app. is debatable.
Starting from Java 9 and next releases (Java 10, 11…), new syntax is introduced (e.g.,
var) while APIs evolve and/or disappear from the kernel of lastest JVM version. This creates inter-release compatibility disruption. With respect to this trend, Java 11 is recognized as a key step to migrate from Java 8 (see also here… or there…).
Novelties are commented on several Web sites, say, Java 10, Java 11, etc.
Java 8 52 Java 9 53 Java 10 54 Java 11 55
- You may download Java 8 from here… while API doc. is here…
- You may download Java 9, 10, 11… from here…
macOSCurrent shellJava Virtual Machine (JVM) location command
echo $0Display (example)
/usr/libexec/java_home -VActive JVM (empty ⇒ very last version is chosen)
Matching Java Virtual Machines (3): 18.104.22.168 (x86_64) "Oracle Corporation" - "Java SE 22.214.171.124" /Library/Java/JavaVirtualMachines/jdk-126.96.36.199.jdk/Contents/Home 1.8.333.02 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 1.8.0_333 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk-188.8.131.52.jdk/Contents/HomeChanging default JDK version (current session)
echo $JAVA_HOMEActive JVM (note that Java 8 does not support
export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_333`
java -versionJava packager
UbuntuJava Virtual Machine (JVM) location command (current JVM)Java Virtual Machine (JVM) location command (other JVMs)
/usr/lib/jvmChanging default JDK version
[sudo] update-java-alternatives config java
Java 9 key enhancement is the introduction of modules (
modulekeyword) in order to rationalize the overall core software functionality present in the JVM at execution time. JVM 9 is then decomposed into modules to avoid massive code functionality, which is not required at all by any user-defined app. To that extent, Java 9-based design of an app. arises from the “module” principle in the sense that developers have to isolate their code in execution-independent components (i.e., user-defined modules).
The other notable extension is the availability of a Java source interpreter known as Java Shell (JShell).
- Much pre-programming code in the JVM may be excluded at run-time provided that any Java app. on the top of the executing JVM does not use this code; the footprint of the JVM becomes then lower for the Operating System (OS). Typically, Java great functionalities, for instance Common Object Request Broker Architecture (CORBA -
org.omg.CORBApackage) or Java Architecture for XML Binding (JAXB -
javax.xml.bindpackage) have been removed from Java 11. Accordingly, JAXB from Java 11 then relies on the reuse of a third-party library (here…).
- Beyond, from Java 9, a great effort is about optimization at large: representation of
Stringinstances in memory, redesign of metadata in
.classfiles, etc. In fact, numerous improvements related to Java 9, 10, 11… are hidden from the developer's perspective: JVM kernel rationalization through “componentization” targeting performance, security… issues.
- Challenge is the design of a virtual machine with greater power and polyglotism: GraalVM™.
- Java data types here…
- Java Object-Oriented Approach here…
- Java Exception Handling here…
- Java Generics and Collections here…
- Java Streams and Lambda expressions here…
- Java Platform Module System (JPMS) here…
- Java Concurrency (including WebSockets) here…
- Java I/O API here…
- Java Security here…
- Java DataBase Connectivity (JDBC) here…
- Java Localization here…