JAVA: Past and Present
Tags: java, programming, development
Published: 2024-05-09 09:43:56

James Gosling, Mike Sheridan, and Patrick Naughton initiated the Java language project in June 1991. They envisioned a language that was portable, object-oriented, and could be used to develop a wide range of applications

*Previously published [On My Blog](https://codeline24.com) where you can find more articles about Java and Spring Framework*

The language needed to use the principle of a virtual machine to make it compact and portable. It needed to be based on the current object-oriented language, C++.

The project went ahead under the name “green” and the language was based on an old model of USCD Pascal, which makes it possible to generate interpretive code.

In 1993, the language was renamed “Oak” and was oriented towards the object model that more closely matched the culture of in-house developers than the Pascal procedural model.

The portability and compact nature of Oak made it the perfect candidate for use on the Internet, which was well known for its slow speed and heterogeneity on connected machines. It took nearly two years to adapt Oak, and in January 1995, after long brainstorming sessions and coffee breaks, Sun renamed Oak Java. 

On May 23, 1995, during the SunWorld Exposition, the technological achievements of Java language were presented to the public and brought quick success.

Created with the slogan Write once, run anywhere (WORA), meant that a Java program could be developed on any device, compiled into a standard called bytecode, and be expected to run on any device equipped with a Java Runtime Environment (JRE).

JRE is a concrete platform implementation of a set of specifications that formally define what is required to run Java applications. 

This set of specifications is called a Java virtual machine (JVM).

This meant that engineers could develop programs written in Java language that would run on every platform that implements, platform specific JRE i.e. JVM.

The way allowed Java to solve portability problems is that output of Java compiler is not platform specific compile code, it is a set of instructions called bytecode executed by Java Virtual Machine (JVM) which is part of Java Runtime Environment installed on a specific platform.

In general, when a program is compiled to an intermediate form and then interpreted by a virtual machine, it runs slower than it would run if compiled to executable code. To provide a performance boost, HotSpot technology was introduced. HotSpot provides a Just-In-Time (JIT) compiler for bytecode. JIT compiler, compiles parts of bytecode into native code, as it is needed, during execution.

Java almost immediately captivated the hearts of developers due to its portability and large set of built-in libraries and became popular for mainstream programming. Java evolved to three core technology packages (JVM, JRE and JDK, a superset of JRE) that represented both the platform and the programming language.

The JVM provided the foundation for executing Java bytecode, the JRE provided the runtime environment for Java applications, and the JDK provided the tools for developing Java applications. This modular architecture made Java highly adaptable to various development environments and deployment scenarios.

**Java: The Platform**

Besides JVM implementation, JRE contains other supporting tools to get most of your java applications, such as: 

- Development toolkits 
Frameworks for Graphical User Interface (GUI) called Abstract Windowing Toolkit (AWT) and Swing.

- Integration libraries
Java IDL, to support distributed objects written in Java Programming language, Java Database Connectivity (JDBC), tool for applications to access remote databases

Java Naming and Directory Interface (JNDI), a directory service that lets clients create portable applications that fetch information from external databases using naming rules.

- Language and utility libraries
Set of packages that are fundamental for designing Java applications (such as collections and concurrency framework), management and monitoring.

- Deployment solutions
Technologies that simplify release changes and updates to user applications.

JRE Implementation of JVM runs on top of the operating system and takes user compiled code, links it with above mentioned libraries and starts the JVM to run it.

The JRE uses three core components to work

- ClassLoader
The Java ClassLoader dynamically loads all class files necessary into the Java Virtual Machine (JVM)

- Bytecode Verifier
They bytecode verifier checks the format and accuracy of the Java code before loading it into the JVM

- Interpreter
Creates the JVM instance that runs the program

Java Development Kit (JDK) is a superset of JRE(tool for running Java code) that provides tools necessary to write and develop Java applications.

We can say that JDK is a concrete implementation of Java platform specifications and contains all that is needed to develop and run Java applications.

Product name for JDK is Java Standard Edition (JSE).

Java Enterprise Edition (JEE) is extending JSE with a set of specifications for enterprise functionalities such as web services, distributed computing, reading and writing to databases in a transactional way.

Oracle Corporation is the current owner of the official implementation of the Java SE platform, following their acquisition of Sun Microsystems on January 27, 2010. 

On September 12, 2017 Oracle announced that it would submit the JEE to Eclipse Foundation.

The platform was renamed from JEE to JakartaEE.

**Java: The Language**

Sun Microsystems released the first public implementation as Java 1.0 in 1996.

Since the first release of Java, there have been many additional features added to the language. Now Java is being used in Windows applications, Web applications, enterprise applications, mobile applications, cards, etc, Each new version adds new features.

The Java Programming Language is a general-purpose, concurrent, strongly typed, class-based object-oriented language. It is normally compiled to the bytecode instruction set and binary format defined in the Java Virtual Machine Specification. 

Although fundamental principles of java are portability and security, other factors played important role also in invention and development of java, such as:

- Robustness
There are two main reasons for program failure: memory management mistakes and run time errors. Java addresses these problems by providing automatic memory cleaning of unused objects, called garbage collection and object oriented exception handling for runtime errors. In a Java application all runtime errors should be managed by the program.

- Familiarity and Simplicity
Java was designed to be easy to learn, assuming that you have some programming experience. It was easy to move to java if you have some previous experience in C++.

- Object Orientation
Java strongly supports Object-Oriented Programming concepts such as encapsulation, abstraction, and inheritance.

All the instructions and data in a Java program have to be added inside a class or object.

- Multithreading
Java was written to be able to deal with multiple things simultaneously by defining multiple threads. Java runtime system implements multi process synchronization thas enables you to focus on behavior of your program instead of multitasking system

- Distributedness
Java was designed to be able run in a distributed environment like the internet. Java also supports Remote method invocation(RMI) to be able invoke methods across networks.

- Dynamicity
With runtime type information java is able dynamically link new class libraries, objects and methods. 

In the past, major Java releases were typically separated by two or more years. However, subsequent to the release of JDK 9, the time between major Java releases has decreased. Today, the expected time between releases is just six months. 

At the heart of Java development is Java Community Processes (JCP), established in 1998,  a formalized mechanism that allows interested parties to develop standard technical specifications for Java technology.

The JCP formalizes how new features and changes to Java are proposed via Java Specification Requests (JSRs). It contains proposed changes, additions, or improvements to the Java technology platform. The JCP itself is described by a JSR. As of 2020, JSR 387 describes the current version (2.11) of the JCP.

Every JSR enters a review process. This is a multistage process wherein the changes proposed in the JSR are gradually considered more seriously, modified, anguished over, and eventually adopted.

JEP is a JDK Enhancement Proposal. JEP proposes experimental ideas that are channeled into becoming JSR.

New features of Java are delivered via JDK projects. When a proposal is mature it is considered for implementation in a JDK project.

A JDK project is a broad range of implemented JEPs, including one or more groups responsible for various areas of the Java platform.

The most important active JDK projects are: Amber, Loom, Panama and Valhalla

Project Amber is incubator of smaller Java features intended to be part of future Java releases
Project Loom is an effort to replace the old Java threading model that relies on underlying OS threads by creating virtual threads.
Project Panama is an effort to improve Java communication with non-Java APIs through Java Native Interface(JNI) by introducing some foundational components.
Project Valhalla’s aim is bringing between primitive and custom types. By unifying Java’s types it will be possible to apply generics to both classes and primitives gaining performance benefits.
There have been many releases of Java language since 1995.

We can say that Java 8 released in 2014 was the most significant release of Java that put it on the track of one of the  most important programming languages.

Its main new features were Lambda expressions and stream API  putting it closer to the functional programming paradigm.

Since Java 9, there have been new releases of Java every six months. However not every release of java gets Long Time Support (LTS).

Currently Long time supported versions of Java are 11, 17 and 21, the last version released on September 21st 2023.

**Java: Perspectives**

Java’s strict specifications and standardized development practices ensure consistency and interoperability across different development teams and environments. This consistency is crucial for building and maintaining complex microservices architectures.

Because of its well defined JVM, with the advent of cloud computing, containerised development using technologies such as Docker and Kubernetes, is well suited for microservices architectures and various serverless approaches.

Java  is used for mobile application development for building Android applications, which are used by billions of people worldwide. Java is also used in the development of cross-platform mobile applications using tools such as Xamarin and PhoneGap.

Mobile and desktop game development is an area where Java is a popular choice.

With the popular Spring framework’s implementation of JEE specifications, we can say that Java is the language of choice when it comes to development of enterprise applications and microservices architecture.

In 1995, Java introduced two revolutionary concepts that became inevitable principles of modern software development: portability and memory management.

Those two principles still play a fundamental role in the invention of new technologies and ways of software development.

What do you think about Java Language prospects? You can write your thoughts in comments below.


For more in-depth discussions follow me on: 

- [LinkedIn](https://www.linkedin.com/in/zeki-jusufoski-bsc-5b525385/)

- [Twitter/X](https://x.com/jzeki)