Java is an object-oriented, class-based programming language. It's one of the top programming languages in the world, used by over 10 million developers.
As of September 2019, the latest version of Java is Java 13, while Java 8 has the most adoption. Originally created by James Gosling at Sun Microsystems, Java is now owned by Oracle.
Java Version History
- Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
- Microbenchmark Suite
- Switch Expressions (Preview)
- JVM Constants API
- One AArch64 Port, Not Two
- Default CDS Archives
- Abortable Mixed Collections for G1
- Promptly Return Unused Committed Memory from G1
- Dynamic class-file constants
- Epsilon: a no-op garbage collector
- Local-variable syntax for lambda parameters
- Low-overhead heap profiling
- HTTP client (standard)
- Transport Layer Security (TLS) 1.3
- Flight recorder
- ZGC: a scalable low-latency garbage collector (Experimental)
- JavaFX, Java EE and CORBA modules have been removed from JDK
- Deprecated the Nashorn JavaScript engine
- Unicode 10.0.0 support
- Local-variable type inference
- Experimental Java-based JIT compiler. This is the integration of the Graal dynamic compiler for the Linux x64 platform
- Application class-data sharing. This allows application classes to be placed in the shared archive to reduce startup and footprint for Java applications
- Time-based release versioning
- Parallel full GC for G1
- JGarbage-collector interface
- Additional Unicode language-tag extensions
- Root certificates
- Thread-local handshakes
- Heap allocation on alternative memory devices
- Remove the native-header generation tool – javah
- Consolidate the JDK forest into a single repository
- Modularization of the JDK under Project Jigsaw (Java Platform Module System)
- JShell: The Java Shell (a Java REPL)
- Ahead-of-time compilation
- XML catalogs
- More concurrency updates. It includes a Java implementation of Reactive Streams, including a new
Flow
class that included the interfaces previously provided by Reactive Streams - Variable handles: define a standard means to invoke the equivalents of various
java.util.concurrent.atomic
andsun.misc.Unsafe
operations - jlink: The Java Linker: create a tool that can assemble and optimize a set of modules and their dependencies into a custom run-time image. It effectively allows to produce a fully usable executable including the JVM to run it
- JavaDB was removed from JDK
- HiDPI graphics: automatic scaling and sizing
- Compact Strings
- Milling Project Coin
- Allow @SafeVargs on private instance methods
- Allow effectively-final variables to be used as resources in the try-with-resources statement
- Allow diamond with anonymous classes if the argument type of the inferred type is denotable
- Complete the removal, begun in Java SE 8, of underscore from the set of legal identifier names
- Support for private methods in interfaces
- Lambda expressions
- Project Nashhorn, which allows developers to embed JavaScript code within applications
- Annotation on Java types
- Unsigned integer arithmetic
- Repeating annotations
- Date and time API
- Statically-linked JNI libraries
- Direct Launch JavaFX JARs
- Remove permanent generation
Java Developers Also Know
- Spring Boot
- Apache Maven or Gradle
- Hibernate
- IntelliJ or Eclipse
- JUnit
Java Alternatives
- OpenJDK
- Kotlin
- C#
- Python
- Scala
Top Java Books
- Effective Java
- Java Concurrency in Practice
- Head First Java
- Thinking in Java
- Java SE 8 for the Really Impatient
Here is a list of Java related blog posts and tutorials published on this blog. They also cover Java related technologies like Spring Boot, Maven, Tomcat and more.
- Basics of Java Garbage Collection
- The char Type in Java is Broken
- Checked vs Unchecked Exceptions in Java. Why it's so Confusing
- What are -Xms and -Xms parameters in Java/JVM
- Spring Boot - Replace Tomcat With Jetty As the Embedded Server
- Java - How to Cancel Tasks in Executors (With Examples)
- How to Stop Threads in Java. Best Practices and Examples.
- Java - Convert char to String with Examples
- Java Math.pow() Method with Examples
- Java PrintWriter Explained with Examples (Java 9+)
- Java Math.abs() with Examples
- Java Math.ceil() Method with Examples
- Java Math.floor() Method with Examples
- Java Math.random() Method with Examples
- Java Math.round() with Examples
- Java Math.sqrt() Method with Examples
- Java String to int with examples
- Fibonacci Series in Java
- Java Stream to Array Conversion
- ArrayList to Array Conversion in Java
- Java char Array to String Conversion
- Java String to Char Array Conversion
- Priority Queue in Java - Tutorial with Examples
- Java - How to Get Keys and Values from Map
- What is the Default Administrator Password for Tomcat?
- Array Length in Java with Examples
- Stack Class in Java Explained with Examples
- Java String Length() Method with Examples
- Java ArrayList Tutorial with Examples
- How to Simulate OutOfMemory Error in Java
- Class Definition in Java
- LinkedList in Java
- Best Java IDEs in 2020
- Spring Boot - Change Default Tomcat Port
- Spring Boot - Enable HTTP Compression in Tomcat
- What is the 'static' keyword in Java?
- Complete Guide to Java 8 forEach
- Marker Interfaces in Java with Examples
- Can we override a protected method in Java?
- Java Records
- How To Declare and Initialize Arrays in Java
- Inheritance in Java
- Java Object.getClass() Method with Examples
- Spring Boot Actuator