Introduction to Java and features of different versions


Java is the general name of java object-oriented programming language and Java platform, which was launched by Sun Microsystems in May 1995. It was jointly developed by James Gosling and his colleagues and officially launched in 1995.

Java is divided into three systems

  • Javase (J2SE) (Java2 Platform Standard Edition)
  • Java EE (J2EE) (Java 2 platform, enterprise edition, Java Platform Enterprise Edition)
  • Java me (J2ME) (Java 2 platform Micro Edition).

Development history

  • In 1991, the green project was founded, and James Gosling of Sun company began to develop the language named oak. Hope to be used to control the microprocessor embedded in CATV switch box, PDA, etc
  • In 1994, oak language was renamed Java
  • On May 23, 1995, Java language was born
  • On January 23, 1996, Sun company released the first java development kit JDK 1.0
  • In April 1996, 10 major operating system vendors announced that they would embed Java technology in their products
  • In September 1996, about 83000 web pages were made with Java technology
  • In October 1996, sun released its first JIT compiler
  • On February 18, 1997, JDK1.1 was released
  • On April 2, 1997, the JavaOne conference was held with more than 10000 participants, setting a record for the scale of similar conferences in the world at that time
  • In September 1997, the Java Developer Connection community had more than 100000 members
  • In February 1998, JDK1.1 was downloaded more than 2000000 times
  • On December 8, 1998, Sun company released three versions of the second generation Java platform (Java 2 for short): J2ME (Java 2 micro edition, Java 2 platform Micro Edition), which is applied to mobile, wireless and limited resource environment; J2SE (Java 2 standard edition, Java 2 Platform Standard Edition), which is applied to desktop environment; and J2EE (Java 2 Enterprise Edition, Java 2 Enterprise Edition) 2 platform for enterprise), which is applied to Java based application server.
  • In June 1999, Sun company released three versions of Java: Standard Version (javase, formerly J2SE), enterprise version (JavaEE, formerly J2EE) and mini version (javame, formerly J2ME)
  • On May 8, 2000, jdk1.3 and J2SE 1.3 were released
  • On May 29, 2000, jdk1.4 was released
  • On September 24, 2001, J2EE 1.3 was released
  • On February 26, 2002, J2SE 1.4 was released
  • At 18:00pm on September 30, 2004, J2SE 1.5 was released, which became another milestone in the history of Java language development. To show the importance of this version, J2SE 1.5 was renamed Java se 5.0 (build 1.5.0)
  • In June 2005, JavaOne conference was held. Sun company made public javase6, changed its version number and name, cancelled J2, changed its name from J2EE to Java EE, changed its name from J2SE to Java se, and changed its name from J2ME to java me. The full name of JDK6 is java se Development Kit 6. 6 is the product version number and 1.6 is the developer version number.
  • On April 20, 2009, Oracle acquired sun for $7.4 billion at $7.5 per share
  • On July 28, 2011, Oracle released Java se 7
  • On March 18, 2014, Java se 8 was released
  • On September 21, 2017, Java se 9 was released
  • On March 21, 2018, Java se 10 was released
  • On September 25, 2018, Java se 11 was released
  • Java se 12 will be released on March 20, 2019
  • On September 17, 2019, Java se 13 is released
  • On March 17, 2020, Java se 14 was released

Main characteristics

  • Simple: Java language is developed from C + +, which cancels the complicated parts in C + +, such as pointer.
  • Object oriented: the foundation of Java language. Java regards all problems as the interaction between objects and abstracts objects into a collection of methods and properties.
  • Distribution: including operation distribution and data distribution. Operation distribution refers to that multiple hosts complete a function together. Data distribution refers to that the data distributed on multiple hosts are processed as a whole.
  • Cross platform: applications written in Java language are not limited by the platform and can be migrated from one platform to another.
  • Interpretive: the source code written in Java language is converted into bytecode, and bytecode can only be executed by computer if it is interpreted as machine code by JVM.
  • Security: the underlying design of Java language can effectively avoid illegal operation.
  • Robustness: Java provides many mechanisms to prevent serious runtime errors, such as compile time type checking and exception handling.
  • Multithreading: Java supports multithreading, allowing multiple threads within the process to work at the same time.

Java   running environment

Java   runtime environment, which is called Java runtime environment for short, contains Java virtual machine and java basic class library. It is a software environment needed to run Java programs on any platform. It is provided for users who want to run Java programs.

JDK is a software development kit of Java language. It is a development kit for programmers to use java language to write Java programs. JDK includes JRE, Java C compiler for compiling java source code, and many tools for debugging and analyzing Java programs, such as jconsole and jvisual VM. It also includes the documents and demo example programs for writing Java programs.

Introduction to Java and features of different versions

Java Platform Standard Edition 7 Documentation

Composition of JRE

  • Java’s class library contains the core files needed to compile Java programs.
    • Core library files, including
    • Data structure library, including list, dictionary and tree
    • XML analysis library
    • Security aspect application library
    • Internationalization and localization application library
    • Comprehensive library file, including the programmer and other system communication function file.
    • JDBC is the API of Java database connection
    • JNDI, Java Naming and Directory Interface
    • RMI and CORBA are used to redistribute software
    • User interface library file, including:
    • AWT, the abstract window development package, provides the functions needed to generate GUI
    • Swing Library
    • Other libraries for revisiting media files, recordings and screenshots
  • A Java virtual machine (JVM) for software execution
  • Plug in, can be used in the browser
  • JWs enables end users to connect to the Internet
  • License files and documentation

JDK release time and version name table

edition name Issue date
JDK 1.0 Oak (oak) 1996-01-23
JDK 1.1 None 1997-02-19
JDK 1.1.4 Sparkler (GEM) 1997-09-12
JDK 1.1.5 Pumpkin (pumpkin) 1997-12-13
JDK 1.1.6 Abigail 1998-04-24
JDK 1.1.7 Brutus (Brutus – ancient Roman statesman and general) 1998-09-28
JDK 1.1.8 Chelsea 1999-04-08
J2SE 1.2 Playground (playground) 1998-12-04
J2SE 1.2.1 None 1999-03-30
J2SE 1.2.1 None 1999-03-30
J2SE 1.2.2 Cricket 1999-07-08
J2SE 1.3 Kestrel (kestrel) 2000-05-08
J2SE 1.3.1 Ladybird (Ladybird) 2001-05-17
J2SE 1.4.0 Merlin 2002-02-13
J2SE 1.4.1 Grasshopper 2002-09-16
J2SE 1.4.2 Mantis (Mantis) 2003-06-26
Java SE 5.0 (1.5.0) Tiger 2004-09-30
Java SE 6.0 (1.6.0) Mustang (Mustang) 2006-04
Java SE 7.0 (1.7.0) Dolphin 2011-07-28
Java SE 8.0 (1.8.0) Spider (spider) 2014-03-18
Java SE 9.0 None 2017-09-21
Java SE 10.0 None 2018-03-21
Java SE 11.0 None 2018-09-25
Java SE 12.0 None 2019-3-19
Java SE 13.0 None 2019-9-17
Java SE 14.0 None 2020-03-17

Features of JDK versions

Old version

JDK 1.0 1996-01-23

JDK 1.1.4 sparkler gem 1997-09-12

JDK 1.1.5 pumpkin 1997-12-13

JDK 1.1.6 Abigail – women’s name 1998-04-24

JDK 1.1.7 Brutus Brutus – Roman statesman and general 1998-09-28

JDK 1.1.8 Chelsea – city name 1999-04-08

J2SE 1.2 playground

J2SE 1.2.1 none 1999-03-30

J2SE 1.2.2 cricket 1999-07-08

J2SE 1.3 kestrel kestrel 2000-05-08

J2SE 1.3.1 ladybird ladybird 2001-05-17

J2SE 1.4.0 Merlin grey backed Falcon 2002-02-13

J2SE 1.4.1 grasshopper 2002-09-16

J2SE 1.4.2 Mantis 2003-06-26

JDK 1.0(1996.1.23)

Sun released Java 1.0, which was called oak at the beginning of the release and changed to Java later;

Pure interpretation running, using plug-in JIT, poor performance, slow running speed

Representative technologies: JVM, applet, AWT.

JDK 1.1(1997.2.19)

  • JDBC (Java database connectivity): it is an application program interface used in Java language to regulate how the client program accesses the database. It provides methods such as querying and updating the data in the database. JDBC is also a trademark of Sun Microsystems. JDBC is oriented to relational database.
  • RMI (remote method invocation): a special class in Java, which can encapsulate multiple objects into one object (bean). It is serializable, provides a parameterless constructor, and provides getter and setter methods to access object properties. “Bean” in the name is a common term for reusable software components for Java.
  • Java Bean: a special class in Java, which can encapsulate multiple objects into one object (bean). It is serializable, provides a parameterless constructor, and provides getter and setter methods to access object properties. “Bean” in the name is a common term for reusable software components for Java.
  • Reflection (introspection only)
  • Support internationalization and Unicode
  • Support internal classes

J2SE 1.2(1998.12.8)

Java technology system is divided into J2SE, J2EE and J2ME

  • JIT (just in time): it is a form of real-time compilation, real-time compilation and dynamic compilation. It is a method to improve the efficiency of program operation. Generally, there are two ways to run a program: static compilation and dynamic literal translation. Static compiled programs are all translated into machine code before execution, while literal translation performs sentence by sentence translation while running.
  • EJB Technology
  • JFC (Java foundation classes), including swing 1.0, drag and drop and Java 2D class library
  • Java plug in (Java applet): small program in Web Environment
  • Collection framework
  • Memory mapping for string constants
  • Digital signature of packaged java files
  • Policy tool for controlling authorized access to system resources
  • Java plug in
  • In JDBC, scrollable result set, blob, CLOB, batch update and user-defined type are introduced
  • Add voice support to applet

J2SE 1.3(2000.5.8)

  • Introducing hotspot VM for the first time
  • The Java Naming and directory interface (JNDI) is included in the main library (formerly in the form of extension components)
  • Classes for implementing dynamic proxies
  • Implementation of RMI communication protocol with CORBA IIOP
  • Improving Java2D
  • Java Sound API
  • Jar file index
  • We have done a lot of optimization and enhancement to all aspects of Java

J2SE 1.4(2002.2.13)

  • Language change: assert keyword

  • regular expression

  • Exception chain, which allows an exception to encapsulate an exception at a lower level

  • Support IPv6 secure socket support (through SSL and TLS protocol)

  • Non blocking I / O (NiO)

  • Logging API

  • XML parser

  • XLST converter

  • Java print service

  • Java Web Start

  • Preferences API

  • JDBC 3.0 API

  • Image I/O API

J2SE 5.0(2004.9.30)

  • Generics: provides compile time (static) type security for collections, and does not require most type conversions (type conversions) (specification in JSR 14)
  • Metadata: also known as annotations. Enable language structures (such as classes and methods) to be marked with additional data, which can be handled by metadata aware tools (specification in JSR 175)
  • enumeration
  • Automatic packing and unpacking: basic data types such as int and integer can be automatically converted
  • Import static
  • Variable parameters
  • JUC
  • Generation enhanced loop for each loop
  • Scanner class to parse all kinds of input and buffers
  • Instrumentation proxy class

JavaSE 6(2006.12.11)

  • Introduction of garbage collection G1
  • Optimize lock and synchronization, garbage collection, class loading, etc
  • @Override interface
  • Support dynamic language
  • JDBC4.0 API
  • Java Compiler API
  • Pluggable annotation
  • Add support for native PKI (public key infrastructure), Java GSS (generic security service), Kerberos and LDAP (Lightweight Directory Access Protocol)
  • Inherit web services such as HTTP server API

JavaSE 7(2011.7.28)

  • Diamond syntax (automatic inference of generic instantiation type)
  • Support try with resources
  • Multiple exceptions are caught in one statement block, and multiple catch blocks are connected with | in the same way
  • String is allowed as branch condition in switch statement block
  • Support dynamic language
  • Pointer compression of 64 bit JDK
  • Numeric types can be represented by binary strings, and underscores can be added to the string representation
  • Java NiO. 2 development kit
  • Automatic processing of null value
  • Strengthen the call support for non java languages (jsr-292, upgrade class loading Architecture)

JavaSE 8(2014.3.18)

  • Lambda expressions (closures that allow us to pass functions as arguments to a method)
  • The default method and static method of the interface
  • Method reference

    Parameterless constructor method reference: Class Name:: new or class:: New

    Static method reference: Class:: static_ Method (accepts a class type parameter)

    Class member method reference: Class:: method (no parameters)

    Instance member method reference: instance:: method (accepts a parameter of the corresponding type of instance)
  • Repeated annotation (the same annotation can be used repeatedly in the same place, and the annotation itself needs to be modified by @ repeatable)
  • Implementation of upgrade tool library

    HashMap implementation modification, concurrenthashmap implementation modification

    New stream API( )

    Add optional class to solve null pointer problem
  • Toolkit, jdeps
  • JVM: Metaspace (JEP122) is used instead of permgen space in method area
  • Functional interface
  • Annotation (annotation)
  • Concurrency counter
  • Pipelines Streams API
  • Parallel operation
  • Optional class
  • Remove permgen error
  • Nashorn, nashhorn JavaScript engine

JavaSE 9(2017.9.22)

  • Module system: module is a container of package. One of the biggest changes of Java 9 is the introduction of module system (Jigsaw project).

  • Repl (jshell): interactive programming environment.

  • HTTP 2 client: http / 2 standard is the latest version of HTTP protocol. The new HTTP client API supports websocket, HTTP 2 stream and server push.

  • Improved Javadoc: Javadoc now supports searching in API documents. In addition, the output of Javadoc is now HTML5 compliant.

  • Multi version compatible jar package: the multi version compatible jar function allows you to create a class version that you choose to use only when running library programs in a specific version of Java environment.

  • Set factory method: in the list, set and map interfaces, new static factory methods can create immutable instances of these sets.

  • Private interface method: use the private method in the interface. We can use the private access modifier to write private methods in the interface.

  • Process API: improved API to control and manage operating system processes. introduction java.lang.ProcessHandle And its nested interface info to let developers escape the dilemma that they often have to use local code to obtain the PID of a local process.

  • Improved stream API: the improved stream API adds some convenient methods to make stream processing easier, and uses collectors to write complex queries.

  • Improve try with resources: if you already have a resource that is final or equivalent to a final variable, you can use the variable in the try with resources statement without declaring a new variable in the try with resources statement.

  • Improved discard annotation @ retired: annotation @ retired can mark the status of Java API and indicate that the marked API will be removed or broken.

  • Improved diamond operator: anonymous classes can use diamond operator.

  • Improve the optional class java.util.Optional Many new and useful methods have been added. Optional can be directly converted to stream.

  • Multi resolution image API: define multi-resolution image API, developers can easily operate and display images of different resolutions.

  • Improved completablefuture API: the asynchronous mechanism of completablefuture class can be implemented in ProcessHandle.onExit Method exits.

  • Lightweight JSON API: a lightweight JSON API is built in

  • Reactive streams API: Java 9 introduces a new responsive stream API to support responsive programming in Java 9.

JavaSE 10 (2018.3.32)

  • Jep286, VAR local variable type inference.
  • Jep296, the original use of mercurial management of many JDK warehouse code, combined into a warehouse, simplify the development and management process.
  • Jep304, unified garbage collection interface.
  • Jep307, G1 garbage collector parallel complete garbage collection, to achieve parallelism to improve the worst-case delay.
  • Jep310, application class data (appcds) sharing, reduces memory footprint and startup time by sharing common class metadata across processes.
  • Jep312, ThreadLocal handshake interaction. Callbacks are performed on threads without entering the global JVM safe point. Optimization can stop only a single thread, not all or none of them.
  • Jep313, remove the javah tool that comes with JDK. You can use javac – H instead.
  • Jep314, using additional Unicode language markup extensions.
  • Jep317 can allocate the heap memory to the spare memory device specified by the user.
  • Jep317, using Graal’s Java based compiler, can pre compile java code into local code to improve performance.
  • Jep318 provides a set of default root certification authority certificates in openjdk. Open source the root certificate of Java se provided by Oracle, which makes openjdk more convenient for developers.
  • Jep322, a release version based on time definition, which is the release cycle mentioned above. The version number is $feature. $interim. $update. $patch, which are big version, intermediate version, upgrade package and patch version.

JavaSE 11 (2018.9.25)

  • JEP 181: nest based access control
  • JEP 309: dynamic class file constants
  • JEP 315: improving arche64 Intrinsics
  • JEP 318: epsilon: no operation garbage collector
  • JEP 320: eliminating Java EE and CORBA modules
  • JEP 321: HTTP client (standard)
  • JEP 323: local variable syntax of lambda parameters
  • JEP 324: key protocols of curve25519 and curve448
  • JEP 327:Unicode 10
  • JEP 329: cha20 and poly1305 encryption algorithm
  • JEP 330: launch a column source code program
  • JEP 331: low open pin reactor analysis
  • JEP 321:HTTP Client
  • JEP 332: Transport Layer Security (TLS) 1.3
  • JEP 328: add Java flight recorder (jfr), which is used to create performance analysis records
  • JEP 333: add ZGC (a scalable low latency garbage collector)
  • JavaFX, Java EE and CORBA are removed from JDK
  • JEP 335: abandoning nashorn JavaScript engine

JavaSE 12(2019.3.19)

  • JEP 189: Shenandoah: a low pause time garbage collector (experimental): a new garbage collector named Shenandoah is added, which reduces pause time by evacuating while Java threads are running.
  • JEP 230: Micro benchmark Suite: a new set of micro benchmarks is added to enable developers to easily test the performance of JDK and create new benchmarks based on the existing Java micro benchmark harness (jmh)
  • JEP 325: switch expressions (Preview): the switch statement is extended to be used as a statement or expression to simplify daily code.
  • JEP 334: JVM constants API: an API is introduced to model key class files and nominal descriptions of runtime artifacts, especially those constants that can be loaded from the constant pool.
  • JEP 340: one aarch64 port, not two: delete all source code related to arm64 port, and keep 32-bit arm porting and 64 bit aarch64 porting.
  • JEP 341: default CDs Archives: generate CDs archives by default.
  • JEP 344: abortable mixed collections for G1: when the collection of G1 garbage collector exceeds the pause target, it can stop the garbage collection process.
  • JEP 346: prompt return unused committed memory from G1: improves the G1 garbage collector to automatically return Java heap memory to the operating system when it is idle.

JavaSE 13(2019.9.17)

  • 350: dynamic CDs file. Improve the availability of application class data sharing (appcds). Eliminates the need for users to try out to create each application

    The need for a list of ordered classes. – Xshare:dump Use the class list static archiving enabled by this option should continue to work. This includes built-in classes

    Loader and user-defined class loader.
  • 351: ZGC: uncommit unused memory. Enhance ZGC to return unused heap memory to the operating system.
  • 353: re implementation of old socket API
  • 354: switch optimization update (Preview)
  • 355: text block upgrade, text block (Preview)

JavaSE 14(2020.3.17)

  • 305: pattern matching of instanceof (Preview)
  • 343: packaging tools (incubator)
  • 345: NUMA aware memory allocation of G1
  • 349: jfr event flow
  • 352: nonvolatile mapped byte buffer
  • 358: useful nullpointerexceptions
  • 359: record (Preview)
  • 361: switch expression (standard)
  • 362: abandoning Solaris and SPARC ports
  • 363: delete concurrent mark scan (CMS) garbage collector
  • 364: ZGC on Mac OS
  • 365: ZGC on Windows
  • 366: discard parallelscavenge + serialold GC combination
  • 367: remove pack200 tools and APIs
  • 368: text block (second preview)
  • 370: external memory access API (incubator)

Oracle Java se support Roadmap

Oracle Java se support roadmap *
release GA date Primary support until Extend support until Sustained support
7 July 2011 July 2019 July 2022***** Indeterminate
8 ** March 2014 March 2022 December 2030 Indeterminate
9 (non LTS) September 2017 March 2018 unavailable Indeterminate
10 (non LTS) March 2018 September 2018 unavailable Indeterminate
11(LTS) September 2018 September 2023 September 2026 Indeterminate
12 (non LTS) March 2019 September 2019 unavailable Indeterminate
13 (non LTS) September 2019 March 2020 unavailable Indeterminate
14 (non LTS) March 2020*** September 2020 unavailable Indeterminate
15 (non LTS) September 2020*** March 2021 unavailable Indeterminate

Oracle openjdk version

Oracle Java se support Roadmap

Java class library upgrade

Java5 Java6 Java7 Java8 Java9 Java10
Development framework (j.u.c) JDBC 4.0 NIO 2 Stream API Reactive Streams Flow API Java-Based JIT Compiler
Format (fomatter) JAXB 2.0 Fork / join framework CompletableFuture Process API Updates
Java management extension (JMX) Pluggable annotation processing AP Iinvokedynamic bytecode Annotation on Java Types Variable Handles
Instrumentation Common Annotations Date and Time API Method Handles
XML processing (DOM, sax, XPath, xstl) Java Compiler Api Replicable annotations Spin-Wait Hints
Scripting in JVM JavaScript runtime Stack-Walking API


Introduction to Java

Introduction to Java history

[Java] 1. The birth and development history of Java language (version timeline)

The most complete java version history

The relationship and interpretation of each version of Java and the historical version number of each version

Java version history and new features

Java 1.0 – Java 13

JDK 13

Oracle openjdk version

Oracle Java se support Roadmap

This work adoptsCC agreementReprint must indicate the author and the link of this article

Recommended Today

Practice analysis of rust built-in trait: partialeq and EQ

Abstract:Rust uses traits in many places, from simple operator overloading to subtle features like send and sync. This article is shared from Huawei cloud community《Analysis of rust built-in trait: partialeq and EQ》Author: debugzhang Rust uses traits in many places, from simple operator overloading to subtle features like send and sync. Some traits can be automatically […]