Search This Blog

Tuesday, August 1, 2023

Telephone

From Wikipedia, the free encyclopedia
https://en.wikipedia.org/wiki/Telephone
An old rotary dial telephone
 
AT&T push button telephone made by Western Electric, model 2500 DMG black, 1980

A telephone is a telecommunications device that permits two or more users to conduct a conversation when they are too far apart to be easily heard directly. A telephone converts sound, typically and most efficiently the human voice, into electronic signals that are transmitted via cables and other communication channels to another telephone which reproduces the sound to the receiving user. The term is derived from Greek: τῆλε (tēle, far) and φωνή (phōnē, voice), together meaning distant voice. A common short form of the term is phone, which came into use early in the telephone's history.

In 1876, Alexander Graham Bell was the first to be granted a United States patent for a device that produced clearly intelligible replication of the human voice at a second device. This instrument was further developed by many others, and became rapidly indispensable in business, government, and in households.

The essential elements of a telephone are a microphone (transmitter) to speak into and an earphone (receiver) which reproduces the voice at a distant location. The receiver and transmitter are usually built into a handset which is held up to the ear and mouth during conversation. The transmitter converts the sound waves to electrical signals which are sent through the telecommunication system to the receiving telephone, which converts the signals into audible sound in the receiver or sometimes a loudspeaker. Telephones permit transmission in both directions simultaneously.

Most telephones also contain an alerting feature, such as a ringer or a visual indicator, to announce an incoming telephone call. Telephone calls are initiated most commonly with a keypad or dial, affixed to the telephone, to enter a telephone number, which is the address of the call recipient's telephone in the telecommunication system, but other methods existed in the early history of the telephone.

The first telephones were directly connected to each other from one customer's office or residence to another customer's location. Being impractical beyond just a few customers, these systems were quickly replaced by manually operated centrally located switchboards. These exchanges were soon connected together, eventually forming an automated, worldwide public switched telephone network. For greater mobility, various radio systems were developed for transmission between mobile stations on ships and automobiles in the mid-20th century. Hand-held mobile phones were introduced for personal service starting in 1973. In later decades, their analog cellular system evolved into digital networks with greater capability and lower cost.

Convergence in communication services has provided a broad spectrum of capabilities in cell phones, including mobile computing, giving rise to the smartphone, the dominant type of telephone in the world today.

Early history

Alexander Graham Bell's Telephone Patent Drawing
Replica of the telettrofono, invented by Antonio Meucci and credited by several sources as the first telephone
Bell placing the first New York to Chicago telephone call in 1892

Before the development of the electric telephone, the term telephone was applied to other inventions, and not all early researchers of the electrical device used the term. Perhaps the earliest use of the word for a communications system was the telephon created by Johann Sigismund Gottfried Huth [de] in 1796. Huth proposed an alternative to the optical telegraph of Claude Chappe in which the operators in the signaling towers would shout to each other by means of what he called "speaking tubes", but would now be called giant megaphones. A communication device for sailing vessels, called telephone, was invented by Captain John Taylor in 1844. This instrument used four air horns to communicate with vessels in foggy weather.

Johann Philipp Reis used the term in reference to his invention, commonly known as the Reis telephone, in c. 1860. His device appears to be the first device based on the conversion of sound into electrical impulses.

The term telephone was adopted into the vocabulary of many languages. It is derived from the Greek: τῆλε, tēle, "far" and φωνή, phōnē, "voice", together meaning "distant voice".

Credit for the invention of the electric telephone is frequently disputed. As with other influential inventions such as radio, television, the light bulb, and the computer, several inventors pioneered experimental work on voice transmission over a wire and improved on each other's ideas. New controversies over the issue still arise from time to time. Charles Bourseul, Antonio Meucci, Johann Philipp Reis, Alexander Graham Bell, and Elisha Gray, amongst others, have all been credited with the invention of the telephone.

Alexander Graham Bell was the first to be awarded a patent for the electric telephone by the United States Patent and Trademark Office (USPTO) in March 1876. Before Bell's patent, the telephone transmitted sound in a way that was similar to the telegraph. This method used vibrations and circuits to send electrical pulses, but was missing key features. Bell found that this method produced a sound through intermittent currents, but in order for the telephone to work a fluctuating current reproduced sounds the best. The fluctuating currents became the basis for the working telephone, creating Bell's patent. That first patent by Bell was the master patent of the telephone, from which other patents for electric telephone devices and features flowed.

In 1876, shortly after Bell's patent application, Hungarian engineer Tivadar Puskás proposed the telephone switch, which allowed for the formation of telephone exchanges, and eventually networks.

In the United Kingdom, the blower is used as a slang term for a telephone. The term came from navy slang for a speaking tube. In the U.S., a somewhat dated slang term refers to the telephone as "the horn", as in "I couldn't get him on the horn", or "I'll be off the horn in a moment."

Timeline of early development

Reis's telephone
Bell's first telephone transmitter, ca. 1876, reenacted 50 years later
Acoustic telephone ad, The Consolidated Telephone Co., Jersey City, New Jersey, 1886
1896 telephone from Sweden
Wooden wall telephone with a hand-cranked magneto generator
  • 1844: Innocenzo Manzetti first mooted the idea of a "speaking telegraph" or telephone. Use of the "speaking telegraph" and "sound telegraph" monikers would eventually be replaced by the newer, distinct name, "telephone".
  • 26 August 1854: Charles Bourseul published an article in the magazine L'Illustration (Paris): "Transmission électrique de la parole" (electric transmission of speech), describing a "make-and-break" type telephone transmitter later created by Johann Reis.
  • 26 October 1861: Johann Philipp Reis (1834–1874) publicly demonstrated the Reis telephone before the Physical Society of Frankfurt. Reis's telephone was not limited to musical sounds. Reis also used his telephone to transmit the phrase "Das Pferd frisst keinen Gurkensalat" ("The horse does not eat cucumber salad").
  • 22 August 1865, La Feuille d'Aoste reported "It is rumored that English technicians to whom Manzetti illustrated his method for transmitting spoken words on the telegraph wire intend to apply said invention in England on several private telegraph lines". However, telephones would not be demonstrated there until 1876, with a set of telephones from Bell.
  • 28 December 1871: Antonio Meucci files patent caveat No. 3335 in the U.S. Patent Office, titled "Sound Telegraph", describing communication of voice between two people by wire. A patent caveat was not an invention patent award, but only an unverified notice filed by an individual that he or she intends to file a patent application in the future.
  • 1874: Meucci, after having renewed the caveat for two years does not renew it again, and the caveat lapses.
  • 6 April 1875: Bell's U.S. Patent 161,739 "Transmitters and Receivers for Electric Telegraphs" is granted. This uses multiple vibrating steel reeds in make-break circuits.
  • 11 February 1876: Elisha Gray invents a liquid transmitter for use with the telephone but does not build one.
  • 14 February 1876: Gray files a patent caveat for transmitting the human voice through a telegraphic circuit.
  • 14 February 1876: Alexander Graham Bell applies for the patent "Improvements in Telegraphy", for electromagnetic telephones using what is now called amplitude modulation (oscillating current and voltage) but which he referred to as "undulating current".
  • 19 February 1876: Gray is notified by the U.S. Patent Office of an interference between his caveat and Bell's patent application. Gray decides to abandon his caveat.
  • 7 March 1876: Bell's U.S. patent 174,465 "Improvement in Telegraphy" is granted, covering "the method of, and apparatus for, transmitting vocal or other sounds telegraphically…by causing electrical undulations, similar in form to the vibrations of the air accompanying the said vocal or other sound."
  • 10 March 1876: The first successful telephone transmission of clear speech using a liquid transmitter when Bell spoke into his device, "Mr. Watson, come here, I want to see you." and Watson heard each word distinctly.
  • 30 January 1877: Bell's U.S. patent 186,787 is granted for an electromagnetic telephone using permanent magnets, iron diaphragms, and a call bell.
  • 27 April 1877: Thomas Edison files a patent application for a carbon (graphite) transmitter. It was published as No. 474,230 on 3 May 1892, after a 15-year delay because of litigation. Edison was granted patent 222,390 for a carbon granules transmitter in 1879.

Early commercial instruments

Early telephones were technically diverse. Some used a water microphone, some had a metal diaphragm that induced current in an electromagnet wound around a permanent magnet, and some were dynamic – their diaphragm vibrated a coil of wire in the field of a permanent magnet or the coil vibrated the diaphragm. The sound-powered dynamic variants survived in small numbers through the 20th century in military and maritime applications, where its ability to create its own electrical power was crucial. Most, however, used the Edison/Berliner carbon transmitter, which was much louder than the other kinds, even though it required an induction coil which was an impedance matching transformer to make it compatible with the impedance of the line. The Edison patents kept the Bell monopoly viable into the 20th century, by which time the network was more important than the instrument.

Early telephones were locally powered, using either a dynamic transmitter or by the powering of a transmitter with a local battery. One of the jobs of outside plant personnel was to visit each telephone periodically to inspect the battery. During the 20th century, telephones powered from the telephone exchange over the same wires that carried the voice signals became common.

Early telephones used a single wire for the subscriber's line, with ground return used to complete the circuit (as used in telegraphs). The earliest dynamic telephones also had only one port opening for sound, with the user alternately listening and speaking (or rather, shouting) into the same hole. Sometimes the instruments were operated in pairs at each end, making conversation more convenient but also more expensive.

At first, the benefits of a telephone exchange were not exploited. Instead, telephones were leased in pairs to a subscriber, who had to arrange for a telegraph contractor to construct a line between them, for example, between a home and a shop. Users who wanted the ability to speak to several different locations would need to obtain and set up three or four pairs of telephones. Western Union, already using telegraph exchanges, quickly extended the principle to its telephones in New York City and San Francisco, and Bell was not slow in appreciating the potential.

Signalling began in an appropriately primitive manner. The user alerted the other end, or the exchange operator, by whistling into the transmitter. Exchange operation soon resulted in telephones being equipped with a bell in a ringer box, first operated over a second wire, and later over the same wire, but with a condenser (capacitor) in series with the bell coil to allow the AC ringer signal through while still blocking DC (keeping the phone "on hook"). Telephones connected to the earliest Strowger switch automatic exchanges had seven wires, one for the knife switch, one for each telegraph key, one for the bell, one for the push-button and two for speaking. Large wall telephones in the early 20th century usually incorporated the bell, and separate bell boxes for desk phones dwindled away in the middle of the century.

Rural and other telephones that were not on a common battery exchange had a magneto hand-cranked generator to produce a high voltage alternating signal to ring the bells of other telephones on the line and to alert the operator. Some local farming communities that were not connected to the main networks set up barbed wire telephone lines that exploited the existing system of field fences to transmit the signal.

In the 1890s a new smaller style of telephone was introduced, packaged in three parts. The transmitter stood on a stand, known as a "candlestick" for its shape. When not in use, the receiver hung on a hook with a switch in it, known as a "switchhook". Previous telephones required the user to operate a separate switch to connect either the voice or the bell. With the new kind, the user was less likely to leave the phone "off the hook". In phones connected to magneto exchanges, the bell, induction coil, battery and magneto were in a separate bell box or "ringer box". In phones connected to common battery exchanges, the ringer box was installed under a desk, or other out-of-the-way place, since it did not need a battery or magneto.

Cradle designs were also used at this time, having a handle with the receiver and transmitter attached, now called a handset, separate from the cradle base that housed the magneto crank and other parts. They were larger than the "candlestick" and more popular.

Disadvantages of single-wire operation such as crosstalk and hum from nearby AC power wires had already led to the use of twisted pairs and, for long-distance telephones, four-wire circuits. Users at the beginning of the 20th century did not place long-distance calls from their own telephones but made an appointment and were connected with the assistance of a telephone operator.

What turned out to be the most popular and longest-lasting physical style of telephone was introduced in the early 20th century, including Bell's 202-type desk set. A carbon granule transmitter and electromagnetic receiver were united in a single molded plastic handle, which when not in use was secured in a cradle in the base unit. The circuit diagram of the model 202 shows the direct connection of the transmitter to the line, while the receiver was inductively coupled. In local battery configurations, when the local loop was too long to provide sufficient current from the exchange, the transmitter was powered by a local battery and inductively coupled, while the receiver was included in the local loop. The coupling transformer and the ringer were mounted in a separate enclosure, called the subscriber set. The dial switch in the base interrupted the line current by repeatedly but very briefly disconnecting the line one to ten times for each digit, and the hook switch (in the center of the circuit diagram) disconnected the line and the transmitter battery while the handset was on the cradle.

In the 1930s, telephone sets were developed that combined the bell and induction coil with the desk set, obviating a separate ringer box. The rotary dial becoming commonplace in the 1930s in many areas enabled customer-dialed service, but some magneto systems remained even into the 1960s. After World War II, the telephone networks saw rapid expansion and more efficient telephone sets, such as the model 500 telephone in the United States, were developed that permitted larger local networks centered around central offices. A breakthrough new technology was the introduction of Touch-Tone signaling using push-button telephones by American Telephone & Telegraph Company (AT&T) in 1963.

Digital telephones and voice over IP

An IP desktop telephone attached to a computer network

The invention of the transistor in 1947 dramatically changed the technology used in telephone systems and in the long-distance transmission networks, over the next several decades. With the development of stored program control and MOS integrated circuits for electronic switching systems, and new transmission technologies such as pulse-code modulation (PCM), telephony gradually evolved towards digital telephony, which improved the capacity, quality, and cost of the network.

Integrated Services Digital Network (ISDN) was launched in the 1980's, providing businesses and consumers with access to digital telephony services such as data, voice, video, and fax services.

The development of digital data communications methods made it possible to digitize voice and transmit it as real-time data across computer networks and the Internet, giving rise to the field of Internet Protocol (IP) telephony, also known as voice over Internet Protocol (VoIP). VoIP has proven to be a disruptive technology that is rapidly replacing traditional telephone network infrastructure.

Fixed telephone lines per 100 inhabitants 1997–2007

By January 2005, up to 10% of telephone subscribers in Japan and South Korea had switched to this digital telephone service. A January 2005 Newsweek article suggested that Internet telephony may be "the next big thing." The technology has spawned a new industry comprising many VoIP companies that offer services to consumers and businesses. The reported global VoIP market in October 2021 was $85.2 billion with a projection of $102.5 billion by 2026.

IP telephony uses high-bandwidth Internet connections and specialized customer premises equipment to transmit telephone calls via the Internet, or any modern private data network. The customer equipment may be an analog telephone adapter (ATA) which translates the signals of a conventional analog telephone; an IP Phone, a dedicated standalone device; or a computer softphone application, utilizing the microphone and headset devices of a personal computer or smartphone.

While traditional analog telephones are typically powered from the central office through the telephone line, digital telephones require a local power supply. Internet-based digital service also requires special provisions to provide the service location to the emergency services when an emergency telephone number is called.

Cordless telephones

A cordless telephone system consisting of a handset resting on a base station (left) and a second handset resting on a battery charger unit (right)

A cordless telephone or portable telephone consists of a base station unit and one or more portable cordless handsets. The base station connects to a telephone line, or provides service by voice over IP (VOIP). The handset communicates with the base station via radio frequency signals. A handset's operational range is limited, usually to within the same building or within a short distance from the base station.

Base station

Base stations include a radio transceiver which enables full-duplex, outgoing and incoming signals and speech with the handsets. The base station often includes a microphone, audio amplifier, and a loudspeaker to enable hands-free speakerphone conversations, without needing to use a handset. The base station may also have a numeric keypad for dialing, and a display for caller ID. In addition, answering machine function may be built in.

The cordless handset contains a rechargeable battery, which the base station recharges when the handset rests in its cradle. Muilt-handset systems generally also have additional charging stands. A cordless telephone typically requires a constant electricity supply to power the base station and charger units by means of a DC transformer which plugs into a wall AC power outlet.

Mobile phones

A cellular mobile phone (cell phone). This model is a Motorola Slvr L71, released in 2006.
 
An SMS message written on a Motorola RAZR V3
Two decades of evolution of mobile phones, from a 1992 Motorola 8900X-2 to the 2014 iPhone 6 Plus

A mobile phone or cellphone or hand phone is a handheld telephone which connects via radio transmissions to a cellular telephone network. The cellular network consists of a network of ground based transmitter/receiver stations with antennas – which are usually located on towers or on buildings – and infrastructure connecting to land-based telephone lines. Analog cellular networks first appeared in 1979, with the first digital cellular networks appearing in the early 1990s.

Mobile phones generally incorporate an LCD or OLED display, with some types, such as smartphones, having touch screens. Since the 1990s, mobile phones have gained other features which are not directly related to their primary function as telephones. These include text messaging, calendars, alarm clocks, personal schedulers, cameras, music players, games and later, internet access and smartphone functionality. Nearly all mobile phones have the ability to send text messages to other users via the SMS (Short Message Service) protocol. The multimedia messaging service (MMS) protocol enables users to send and receive multimedia content, such as photos, audio files and video files. As their functionality has increased over the years, many types of mobile phone, notably smartphones, require an operating system to run. Popular mobile phone operating systems in the past have included Symbian, Palm OS, BlackBerry OS and mobile phone versions of Windows. As of 2022, the most used operating systems are Google's Android and Apple's iOS.

Before the era of smartphones, mobile phones were generally manufactured by companies specializing in telecommunications equipment, such as Nokia, Motorola, and Ericsson. Since the advent of smartphones, consumer electronics companies, such as Apple, Samsung, and Xiaomi, have become mobile phone manufacturers.

Mobile phone usage

In 2002, only 10% of the world's population used mobile phones and by 2005 that percentage had risen to 46%. By the end of 2009, there were a total of nearly 6 billion mobile and fixed-line telephone subscribers worldwide. This included 1.26 billion fixed-line subscribers and 4.6 billion mobile subscribers.

Smartphones

A smartphone with a touchscreen user interface, held in landscape orientation

As of 2022, most mobile phones are smartphones, being a combination of a mobile phone and a personal computing device in the same unit. Most smartphones are primarily operated using a graphical user interface and a touch screen. Many phones have a secondary voice user interface, such as Siri on Apple iPhones, which can operate many of the device's functions, as well as enabling users to use spoken commands to interact with the internet. Typically alphanumeric text input is accomplished via an on-screen virtual keyboard, although some smartphones have a small physical keyboard. Smartphones offer the ability to access internet data through the cellular network and via wi-fi, and usually allow direct connectivity to other devices via Bluetooth or a wired interface, such as USB or Lightning connectors. Smartphones, being able to run apps, have vastly expanded functionality compared to previous mobile phones. Having internet access and built in cameras, smartphones have made video calling readily accessible via IP connections. Smartphones also have access to a large number of web services and web apps, giving them functionality similar to traditional computers, although smartphones are often limited by their relatively small screen size and the size of their keyboards. Typically, smartphones feature such tools as cameras, media players, web browsers, email clients, interactive maps, satellite navigation and a variety of sensors, such as a compass, accelerometers and GPS receivers. In addition to voice calls, smartphone users commonly communicate using a wide variety of messaging formats, including SMS, MMS, email, and various proprietary messaging services, such as iMessage and various social media platforms.

Satellite phones

First generation late 1990s Iridium satellite phone

A satellite telephone, or satphone, is a type of mobile phone that connects to other phones or the telephone network by radio link through satellites orbiting the Earth instead of terrestrial cell sites, as cellphones do. Therefore, they can work in most geographic locations on the Earth's surface, as long as open sky and the line-of-sight between the phone and the satellite is provided. Depending on the architecture of a particular system, coverage may include the entire Earth or only specific regions. Satellite phones provide similar functionality to terrestrial mobile telephones; voice calling, text messaging, and low-bandwidth Internet access are supported through most systems. The advantage of a satellite phone is that it can be used in such regions where local terrestrial communication infrastructures, such as landline and cellular networks, are not available.

Satellite phones are popular on expeditions into remote locations, hunting, fishing, maritime sector, humanitarian missions, business trips, and mining in hard-to-reach areas, where there is no reliable cellular service. Satellite telephones rarely get disrupted by natural disasters on Earth or human actions such as war, so they have proven to be dependable communication tools in emergency situations, when the local communications system can be compromised.

Java (software platform)

From Wikipedia, the free encyclopedia
https://en.wikipedia.org/wiki/Java_(software_platform)

Java (software platform)
Original author(s)James Gosling, Sun Microsystems
Developer(s)Oracle Corporation
Initial releaseJanuary 23, 1996; 27 years ago
Stable release19.0.2 (February 18, 2023; 5 months ago)

17.0.6 LTS (February 18, 2023; 5 months ago)
11.0.17 LTS (October 18, 2022; 9 months ago)

8u351 LTS (October 18, 2022; 9 months ago
Written inJava, C++, C, assembly language
Operating systemMicrosoft Windows, Linux, macOS, and for old versions: Solaris
Platformx64, ARMv8, and for old versions: ARMv7, IA-32, SPARC (up to Java 14) (Java 8 includes 32-bit support for Windows – while no longer supported freely by Oracle for commercial use)
Available inEnglish, Chinese, French, German, Italian, Japanese, Korean, Portuguese, Spanish, Swedish
TypeSoftware platform
LicenseDual-license: GNU General Public License version 2 with classpath exception, and a proprietary license.
Website
A Java-powered program

Java is a set of computer software and specifications developed by James Gosling at Sun Microsystems that provides a system for developing application software and deploying it in a cross-platform computing environment. Java is used in a wide variety of computing platforms from embedded devices and mobile phones to enterprise servers and supercomputers. Java applets, which are less common than standalone Java applications, were commonly run in secure, sandboxed environments to provide many features of native applications through being embedded in HTML pages.

Writing in the Java programming language is the primary way to produce code that will be deployed as byte code in a Java virtual machine (JVM); byte code compilers are also available for other languages, including Ada, JavaScript, Python, and Ruby. In addition, several languages have been designed to run natively on the JVM, including Clojure, Groovy, and Scala. Java syntax borrows heavily from C and C++, but object-oriented features are modeled after Smalltalk and Objective-C. Java eschews certain low-level constructs such as pointers and has a very simple memory model where objects are allocated on the heap (while some implementations e.g. all currently supported by Oracle, may use escape analysis optimization to allocate on the stack instead) and all variables of object types are references. Memory management is handled through integrated automatic garbage collection performed by the JVM.

Latest version

The latest version is Java 20, released in March 2023, while Java 17, the latest long-term support (LTS), was released in September 2021. As an open source platform, Java has many distributors, including Amazon, IBM, Azul Systems, and AdoptOpenJDK. Distributions include Amazon Corretto, Zulu, AdoptOpenJDK, and Liberica. Regarding Oracle, it distributes Java 8, and also makes available e.g. Java 11, both also currently supported LTS versions. Oracle (and others) "highly recommend that you uninstall older versions of Java" than Java 8, because of serious risks due to unresolved security issues. Since Java 9 (as well as versions 10–16, and 18–19) are no longer supported, Oracle advises its users to "immediately transition" to a supported version. Oracle released the last free-for-commercial-use public update for the legacy Java 8 LTS in January 2019, and will continue to support Java 8 with public updates for personal use indefinitely. Oracle extended support for Java 6 ended in December 2018.

Platform

The Java platform is a suite of programs that facilitate developing and running programs written in the Java programming language. A Java platform includes an execution engine (called a virtual machine), a compiler and a set of libraries; there may also be additional servers and alternative libraries that depend on the requirements. Java platforms have been implemented for a wide variety of hardware and operating systems with a view to enable Java programs to run identically on all of them.

The Java platform consists of several programs, each of which provides a portion of its overall capabilities. For example, the Java compiler, which converts Java source code into Java bytecode (an intermediate language for the JVM), is provided as part of the Java Development Kit (JDK). The Java Runtime Environment (JRE), complementing the JVM with a just-in-time (JIT) compiler, converts intermediate bytecode into native machine code on the fly. The Java platform also includes an extensive set of libraries.

The essential components in the platform are the Java language compiler, the libraries, and the runtime environment in which Java intermediate bytecode executes according to the rules laid out in the virtual machine specification.

Application domains

Different platforms target different classes of device and application domains:

  • Java Card: A technology that allows small Java-based applications (applets) to be run securely on smart cards and similar small-memory devices.
  • Java ME (Micro Edition): Specifies several different sets of libraries (known as profiles) for devices with limited storage, display, and power capacities. It is often used to develop applications for mobile devices, PDAs, TV set-top boxes, and printers.
  • Java SE (Standard Edition): For general-purpose use on desktop PCs, servers and similar devices.
  • Jakarta EE (Enterprise Edition): Java SE plus various APIs which are useful for multi-tier client–server enterprise applications.

Java SE

Java Platform, Standard Edition (Java SE) is a computing platform for development and deployment of portable code for desktop and server environments. Java SE was formerly known as Java 2 Platform, Standard Edition (J2SE).

The platform uses Java programming language and is part of the Java software-platform family. Java SE defines a range of general-purpose APIs—such as Java APIs for the Java Class Library—and also includes the Java Language Specification and the Java Virtual Machine Specification. OpenJDK is the official reference implementation since version 7.

Jakarta EE

Jakarta EE, formerly Java Platform, Enterprise Edition (Java EE) and Java 2 Platform, Enterprise Edition (J2EE), is a set of specifications, extending Java SE with specifications for enterprise features such as distributed computing and web services. Jakarta EE applications are run on reference runtimes, that can be microservices or application servers, which handle transactions, security, scalability, concurrency and management of the components they are deploying.

Java virtual machine

The heart of the Java platform is the "virtual machine" that executes Java bytecode programs. This bytecode is the same no matter what hardware or operating system the program is running under. However, new versions, such as for Java 10 (and earlier), have made small changes, meaning the bytecode is in general only forward compatible. There is a JIT (Just In Time) compiler within the Java Virtual Machine, or JVM. The JIT compiler translates the Java bytecode into native processor instructions at run-time and caches the native code in memory during execution.

The use of bytecode as an intermediate language permits Java programs to run on any platform that has a virtual machine available. The use of a JIT compiler means that Java applications, after a short delay during loading and once they have "warmed up" by being all or mostly JIT-compiled, tend to run about as fast as native programs. Since JRE version 1.2, Sun's JVM implementation has included a just-in-time compiler instead of an interpreter.

Although Java programs are cross-platform or platform independent, the code of the Java Virtual Machines (JVM) that execute these programs is not. Every supported operating platform has its own JVM.

Java Development Kit

The Java Development Kit (JDK) is a distribution of Java Technology by Oracle Corporation. It implements the Java Language Specification (JLS) and the Java Virtual Machine Specification (JVMS) and provides the Standard Edition (SE) of the Java Application Programming Interface (API). It is derivative of the community driven OpenJDK which Oracle stewards. It provides software for working with Java applications. Examples of included software are the virtual machine, a compiler, performance monitoring tools, a debugger, and other utilities that Oracle considers useful for a Java programmer.

Oracle have released the current version of the software under the Oracle No-Fee Terms and Conditions (NFTC) license. Oracle release binaries for the x86-64 architecture for Windows, macOS, and Linux based operating systems, and for the aarch64 architecture for macOS and Linux. Previous versions have supported the Oracle Solaris operating system and SPARC architecture.

Oracle's primary implementation of the JVMS is known as the HotSpot (virtual machine).

Java Runtime Environment

The Java Runtime Environment (JRE) released by Oracle is a freely available software distribution containing a stand-alone JVM (HotSpot), the Java standard library (Java Class Library), a configuration tool, and—until its discontinuation in JDK 9—a browser plug-in. It is the most common Java environment installed on personal computers in the laptop and desktop form factor. Mobile phones including feature phones and early smartphones that ship with a JVM are most likely to include a JVM meant to run applications targeting Micro Edition of the Java platform. Meanwhile, most modern smartphones, tablet computers, and other handheld PCs that run Java apps are most likely to do so through support of the Android operating system, which includes an open source virtual machine incompatible with the JVM specification. (Instead, Google's Android development tools take Java programs as input and output Dalvik bytecode, which is the native input format for the virtual machine on Android devices.) The last Critical Path Update version of JRE with an Oracle BCL Agreement was 8u201 and, the last Patch Set Update version with the same license was 8u202. The last Oracle JRE implementation, regardless of its licensing scheme, was 9.0.4. Since Java Platform SE 9, the whole platform also was grouped into modules. The modularization of Java SE implementations allows developers to bundle their applications together with all the modules used by them, instead of solely relying on the presence of a suitable Java SE implementation in the user device.

Class libraries

In most modern operating systems (OSs), a large body of reusable code is provided to simplify the programmer's job. This code is typically provided as a set of dynamically loadable libraries that applications can call at runtime. Because the Java platform is not dependent on any specific operating system, applications cannot rely on any of the pre-existing OS libraries. Instead, the Java platform provides a comprehensive set of its own standard class libraries containing many of the same reusable functions commonly found in modern operating systems. Most of the system library is also written in Java. For instance, the Swing library paints the user interface and handles the events itself, eliminating many subtle differences between how different platforms handle components.

The Java class libraries serve three purposes within the Java platform. First, like other standard code libraries, the Java libraries provide the programmer a well-known set of functions to perform common tasks, such as maintaining lists of items or performing complex string parsing. Second, the class libraries provide an abstract interface to tasks that would normally depend heavily on the hardware and operating system. Tasks such as network access and file access are often heavily intertwined with the distinctive implementations of each platform. The java.net and java.io libraries implement an abstraction layer in native OS code, then provide a standard interface for the Java applications to perform those tasks. Finally, when some underlying platform does not support all of the features a Java application expects, the class libraries work to gracefully handle the absent components, either by emulation to provide a substitute, or at least by providing a consistent way to check for the presence of a specific feature.

Languages

The word "Java", alone, usually refers to Java programming language that was designed for use with the Java platform. Programming languages are typically outside of the scope of the phrase "platform", although the Java programming language was listed as a core part of the Java platform before Java 7. The language and runtime were therefore commonly considered a single unit. However, an effort was made with the Java 7 specification to more clearly treat the Java language and the Java Virtual Machine as separate entities, so that they are no longer considered a single unit.

Third parties have produced many compilers or interpreters that target the JVM. Some of these are for existing languages, while others are for extensions to the Java language. These include:

  • BeanShell – a lightweight scripting language for Java (see also JShell)
  • Ceylon – an object-oriented, strongly statically typed programming language with an emphasis on immutability
  • Clojure – a modern, dynamic, and functional dialect of the Lisp programming language on the Java platform
  • Gosu – a general-purpose Java Virtual Machine-based programming language released under the Apache License 2.0
  • Groovy – a fully Java interoperable, Java-syntax-compatible, static and dynamic language with features from Python, Ruby, Perl, and Smalltalk
  • JRuby – a Ruby interpreter
  • Jython – a Python interpreter
  • Kotlin – an industrial programming language for JVM with full Java interoperability
  • Rhino – a JavaScript interpreter
  • Scala – a multi-paradigm programming language with non-Java compatible syntax designed as a "better Java"

Similar platforms

The success of Java and its write once, run anywhere concept has led to other similar efforts, notably the .NET Framework, appearing since 2002, which incorporates many of the successful aspects of Java. .NET was built from the ground-up to support multiple programming languages, while the Java platform was initially built to support only the Java language, although many other languages have been made for JVM since. Like Java, .NET languages compile to byte code and are executed by the Common Language Runtime (CLR), which is similar in purpose to the JVM. Like the JVM, the CLR provides memory management through automatic garbage collection, and allows .NET byte code to run on multiple operating systems.

.NET included a Java-like language first named J++, then called Visual J# that was incompatible with the Java specification. It was discontinued 2007, and support for it ended in 2015.

Performance

The JVM specification gives a lot of leeway to implementors regarding the implementation details. Since Java 1.3, JRE from Oracle contains a JVM called HotSpot. It has been designed to be a high-performance JVM.

To speed-up code execution, HotSpot relies on just-in-time compilation. To speed-up object allocation and garbage collection, HotSpot uses generational heap.

Generational heap

The Java virtual machine heap is the area of memory used by the JVM for dynamic memory allocation.

In HotSpot the heap is divided into generations:

  • The young generation stores short-lived objects that are created and immediately garbage collected.
  • Objects that persist longer are moved to the old generation (also called the tenured generation). This memory is subdivided into (two) Survivors spaces where the objects that survived the first and next garbage collections are stored.

The permanent generation (or permgen) was used for class definitions and associated metadata prior to Java 8. Permanent generation was not part of the heap. The permanent generation was removed from Java 8.

Originally there was no permanent generation, and objects and classes were stored together in the same area. But as class unloading occurs much more rarely than objects are collected, moving class structures to a specific area allowed significant performance improvements.

Security

The Java JRE is installed on a large number of computers. End users with an out-of-date version of JRE therefore are vulnerable to many known attacks. This led to the widely shared belief that Java is inherently insecure. Since Java 1.7, Oracle's JRE for Windows includes automatic update functionality.

Before the discontinuation of the Java browser plug-in, any web page might have potentially run a Java applet, which provided an easily accessible attack surface to malicious web sites. In 2013 Kaspersky Labs reported that the Java plug-in was the method of choice for computer criminals. Java exploits are included in many exploit packs that hackers deploy onto hacked web sites. Java applets were removed in Java 11, released on September 25, 2018.

Java Versions

Java 17 (2021)

Java 17, a Long Term Support (LTS) release, comes with several enhancements. It provides pattern matching for switch statements and sealed classes.

Java 16 (2021)

Java 16 introduces record classes, pattern matching, and sealed classes for enhanced data modelling capabilities.

Java 15 (2020)

Java 15 introduced text blocks and sealed classes as preview features, enhancing string and class handling.

Java 14 (2020)

Java 14 brought new features such as record classes and pattern matching for instanceof as preview features.

Java 13 (2019)

Java 13 included enhancements like text blocks and reimplementation of the legacy Socket API.

Java 12 (2019)

Java 12 introduced switch expressions and the new Shenandoah garbage collector.

Java 11 (2018)

Java 11, a LTS release, introduced the new HTTP Client. It also removed Java EE and CORBA modules.

Java 10 (2018)

Java 10 introduced Local-Variable Type Inference (var), which allows developers to declare local variables without specifying their type.

Java 9 (2017)

Java 9 introduced the Java Platform Module System (JPMS) for modularizing applications and JShell, an interactive Java REPL.

Java 8 (2014)

Java 8 is a major release that introduced Lambda Expressions and a new Date and Time API for better productivity.

Java 7 (2011)

Java 7 introduced try-with-resources, Switch on String, and Diamond Operator. It also included expanded exception handling and a new file I/O library (NIO.2).

Java 6 (2006)

Java 6 introduced Scripting Language Support (JSR 223) and Web Service Enhancements. It also provided JDBC 4.0 with SQL XML support.

Java 5 (2004)

Java 5 was a significant release that included Generics, an Enhanced for Loop, Autoboxing/Unboxing, Static Import, Varargs, Enumerations, and Annotations.

Java 4 (2002)

Java 4 introduced Regular Expressions, Exception Chaining, and a new set of I/O APIs known as NIO (New Input/Output). It also included a new Logging API.

Java 3 (2000)

Java 3 included Sun's new JVM known as HotSpot. It also introduced Java Naming and Directory Interface (JNDI) and Java Platform Debugger Architecture (JPDA).

Java 2 (1998)

Java 2 introduced the Collections Framework, Java String memory map for constants, a Just In Time (JIT) compiler, and the Swing API for GUIs.

Java 1.1 (1997)

Java 1.1 introduced Inner Classes, Reflection, Java Beans, and the JDBC API for database access.

Java 1.0 (1996)

Java 1.0 was the first version of the Java programming language. It introduced object-oriented programming and bytecode, which made Java platform-independent.

History

James Gosling

The Java platform and language began as an internal project at Sun Microsystems in December 1990, providing an alternative to the C++/C programming languages. Engineer Patrick Naughton had become increasingly frustrated with the state of Sun's C++ and C application programming interfaces (APIs) and tools, as well as with the way the NeWS project was handled by the organization. Naughton informed Scott McNealy about his plan of leaving Sun and moving to NeXT; McNealy asked him to pretend he was God and send him an e-mail explaining how to fix the company. Naughton envisioned the creation of a small team that could work autonomously without the bureaucracy that was stalling other Sun projects. McNealy forwarded the message to other important people at Sun, and the Stealth Project started.

The Stealth Project was soon renamed to the Green Project, with James Gosling and Mike Sheridan joining Naughton. Together with other engineers, they began work in a small office on Sand Hill Road in Menlo Park, California. They aimed to develop new technology for programming next-generation smart appliances, which Sun expected to offer major new opportunities.

The team originally considered using C++, but rejected it for several reasons. Because they were developing an embedded system with limited resources, they decided that C++ needed too much memory and that its complexity led to developer errors. The language's lack of garbage collection meant that programmers had to manually manage system memory, a challenging and error-prone task. The team also worried about the C++ language's lack of portable facilities for security, distributed programming, and threading. Finally, they wanted a platform that would port easily to all types of devices.

Bill Joy had envisioned a new language combining Mesa and C. In a paper called Further, he proposed to Sun that its engineers should produce an object-oriented environment based on C++. Initially, Gosling attempted to modify and extend C++ (a proposed development that he referred to as "C++ ++ --") but soon abandoned that in favor of creating a new language, which he called Oak, after the tree that stood just outside his office.

By the summer of 1992, the team could demonstrate portions of the new platform, including the Green OS, the Oak language, the libraries, and the hardware. Their first demonstration, on September 3, 1992, focused on building a personal digital assistant (PDA) device named Star7 that had a graphical interface and a smart agent called "Duke" to assist the user. In November of that year, the Green Project was spun off to become Firstperson, a wholly owned subsidiary of Sun Microsystems, and the team relocated to Palo Alto, California. The Firstperson team had an interest in building highly interactive devices, and when Time Warner issued a request for proposal (RFP) for a set-top box, Firstperson changed their target and responded with a proposal for a set-top box platform. However, the cable industry felt that their platform gave too much control to the user, so Firstperson lost their bid to SGI. An additional deal with The 3DO Company for a set-top box also failed to materialize. Unable to generate interest within the television industry, the company was rolled back into Sun.

Java meets the Web

John Gage

In June and July 1994 – after three days of brainstorming with John Gage (the Director of Science for Sun), Gosling, Joy, Naughton, Wayne Rosing, and Eric Schmidt – the team re-targeted the platform for the World Wide Web. They felt that with the advent of graphical web browsers like Mosaic the Internet could evolve into the same highly interactive medium that they had envisioned for cable TV. As a prototype, Naughton wrote a small browser, WebRunner (named after the movie Blade Runner), renamed HotJava in 1995.

Sun renamed the Oak language to Java after a trademark search revealed that Oak Technology used the name Oak. Sun priced Java licenses below cost to gain market share. Although Java 1.0a became available for download in 1994, the first public release of Java, Java 1.0a2 with the HotJava browser, came on May 23, 1995, announced by Gage at the SunWorld conference. Accompanying Gage's announcement, Marc Andreessen, Executive Vice President of Netscape Communications Corporation, unexpectedly announced that Netscape browsers would include Java support. On January 9, 1996, Sun Microsystems formed the JavaSoft group to develop the technology.

While the so-called Java applets for web browsers no longer are the most popular use of Java (with it e.g. more used server-side) or the most popular way to run code client-side (JavaScript took over as more popular), it still is possible to run Java (or other JVM languages such as Kotlin) in web browsers, even after JVM support has been dropped from them, using e.g. TeaVM.

GNU General Public License

On November 13, 2006, Sun Microsystems made the bulk of its implementation of Java available under the GNU General Public License (GPL).

Version history

The Java language has undergone several changes since the release of JDK (Java Development Kit) 1.0 on January 23, 1996, as well as numerous additions of classes and packages to the standard library. Since J2SE 1.4 the Java Community Process (JCP) has governed the evolution of the Java Language. The JCP uses Java Specification Requests (JSRs) to propose and specify additions and changes to the Java platform. The Java Language Specification (JLS) specifies the language; changes to the JLS are managed under JSR 901.

Sun released JDK 1.1 on February 19, 1997. Major additions included an extensive retooling of the AWT event model, inner classes added to the language, JavaBeans and JDBC.

J2SE 1.2 (December 8, 1998) – Codename Playground. This and subsequent releases through J2SE 5.0 were rebranded Java 2 and the version name "J2SE" (Java 2 Platform, Standard Edition) replaced JDK to distinguish the base platform from J2EE (Java 2 Platform, Enterprise Edition) and J2ME (Java 2 Platform, Micro Edition). Major additions included reflection, a collections framework, Java IDL (an interface description language implementation for CORBA interoperability), and the integration of the Swing graphical API into the core classes. A Java Plug-in was released, and Sun's JVM was equipped with a JIT compiler for the first time.

J2SE 1.3 (May 8, 2000) – Codename Kestrel. Notable changes included the bundling of the HotSpot JVM (the HotSpot JVM was first released in April, 1999 for the J2SE 1.2 JVM), JavaSound, Java Naming and Directory Interface (JNDI) and Java Platform Debugger Architecture (JPDA).

J2SE 1.4 (February 6, 2002) – Codename Merlin. This became the first release of the Java platform developed under the Java Community Process as JSR 59. Major changes included regular expressions modeled after Perl, exception chaining, an integrated XML parser and XSLT processor (JAXP), and Java Web Start.

J2SE 5.0 (September 30, 2004) – Codename Tiger. It was originally numbered 1.5, which is still used as the internal version number. Developed under JSR 176, Tiger added several significant new language features including the for-each loop, generics, autoboxing and var-args.

Java SE 6 (December 11, 2006) – Codename Mustang. It was bundled with a database manager and facilitates the use of scripting languages with the JVM (such as JavaScript using Mozilla's Rhino engine). As of this version, Sun replaced the name "J2SE" with Java SE and dropped the ".0" from the version number. Other major changes include support for pluggable annotations (JSR 269), many GUI improvements, including native UI enhancements to support the look and feel of Windows Vista, and improvements to the Java Platform Debugger Architecture (JPDA) & JVM Tool Interface for better monitoring and troubleshooting.

Java SE 7 (July 28, 2011) – Codename Dolphin. This version developed under JSR 336. It added many small language changes including strings in switch, try-with-resources and type inference for generic instance creation. The JVM was extended with support for dynamic languages, while the class library was extended among others with a join/fork framework, an improved new file I/O library and support for new network protocols such as SCTP. Java 7 Update 76 was released in January 2015, with expiration date April 14, 2015.

In June 2016, after the last public update of Java 7, "remotely exploitable" security bugs in Java 6, 7, and 8 were announced.

Java SE 8 (March 18, 2014) – Codename Kenai. Notable changes include language-level support for lambda expressions (closures) and default methods, the Project Nashorn JavaScript runtime, a new Date and Time API inspired by Joda Time, and the removal of PermGen. This version is not officially supported on the Windows XP platform. However, due to the end of Java 7's lifecycle it is the recommended version for XP users. Previously, only an unofficial manual installation method had been described for Windows XP SP3. It refers to JDK8, the developing platform for Java that also includes a fully functioning Java Runtime Environment. Java 8 is supported on Windows Server 2008 R2 SP1, Windows Vista SP2 and Windows 7 SP1, Ubuntu 12.04 LTS and higher (and some other OSes).

Java SE 9 and 10 had higher system requirements, i.e. Windows 7 or Server 2012 (and web browser minimum certified is upped to Internet Explorer 11 or other web browsers), and Oracle dropped 32-bit compatibility for all platforms, i.e. only Oracle's "64-bit Java virtual machines (JVMs) are certified".

Java SE 11 was released September 2018, the first LTS release since the rapid release model was adopted starting with version 9. For the first time, OpenJDK 11 represents the complete source code for the Java platform under the GNU General Public License, and while Oracle still dual-licenses it with an optional proprietary license, there are no code differences nor modules unique to the proprietary-licensed version. Java 11 features include two new garbage collector implementations, Flight Recorder to debug deep issues, a new HTTP client including WebSocket support.

Java SE 12 was released March 2019.

Java SE 13 was released September 2019.

Java SE 14 was released March 2020.

Java SE 15 was released September 2020.

Java SE 16 was released March 2021.

Java SE 17 was released September 2021.

Java SE 18 was released March 2022.

Java SE 19 was released September 2022.

Java SE 20 was released March 2023.

In addition to language changes, significant changes have been made to the Java class library over the years, which has grown from a few hundred classes in JDK 1.0 to over three thousand in J2SE 5.0. Entire new APIs, such as Swing and Java 2D, have evolved, and many of the original JDK 1.0 classes and methods have been deprecated.

Usage

Desktop use

A Java program running on a Windows Vista desktop computer (supported by Java 8, but not officially by later versions, such as Java 11)

According to Oracle in 2010, the Java Runtime Environment was found on over 850 million PCs. Microsoft has not bundled a Java Runtime Environment (JRE) with its operating systems since Sun Microsystems sued Microsoft for adding Windows-specific classes to the bundled Java runtime environment, and for making the new classes available through Visual J++. Apple no longer includes a Java runtime with OS X as of version 10.7, but the system prompts the user to download and install it the first time an application requiring the JRE is launched. Many Linux distributions include the OpenJDK runtime as the default virtual machine, negating the need to download the proprietary Oracle JRE.

Some Java applications are in fairly widespread desktop use, including the NetBeans and Eclipse integrated development environments, and file sharing clients such as LimeWire and Vuze. Java is also used in the MATLAB mathematics programming environment, both for rendering the user interface and as part of the core system. Java provides cross platform user interface for some high end collaborative applications such as Lotus Notes.

Oracle plans to first deprecate the separately installable Java browser plugin from the Java Runtime Environment in JDK 9 then remove it completely from a future release, forcing web developers to use an alternative technology.

Mascot

Plain ol' Duke

Duke is Java's mascot.

When Sun announced that Java SE and Java ME would be released under a free software license (the GNU General Public License), they released the Duke graphics under the free BSD license at the same time. A new Duke personality is created every year. For example, in July 2011 "Future Tech Duke" included a bigger nose, a jetpack, and blue wings.

Licensing

The source code for Sun's implementations of Java (i.e. the de facto reference implementation) has been available for some time, but until recently, the license terms severely restricted what could be done with it without signing (and generally paying for) a contract with Sun. As such these terms did not satisfy the requirements of either the Open Source Initiative or the Free Software Foundation to be considered open source or free software, and Sun Java was therefore a proprietary platform.

While several third-party projects (e.g. GNU Classpath and Apache Harmony) created free software partial Java implementations, the large size of the Sun libraries combined with the use of clean room methods meant that their implementations of the Java libraries (the compiler and VM are comparatively small and well defined) were incomplete and not fully compatible. These implementations also tended to be far less optimized than Sun's.

Free software

Jonathan I. Schwartz

Sun announced in JavaOne 2006 that Java would become free and open-source software, and on October 25, 2006, at the Oracle OpenWorld conference, Jonathan I. Schwartz said that the company was set to announce the release of the core Java Platform as free and open source software within 30 to 60 days.

Sun released the Java HotSpot virtual machine and compiler as free software under the GNU General Public License on November 13, 2006, with a promise that the rest of the JDK (that includes the JRE) would be placed under the GPL by March 2007 ("except for a few components that Sun does not have the right to publish in distributable source form under the GPL"). According to Richard Stallman, this would mean an end to the "Java trap". Mark Shuttleworth called the initial press announcement, "A real milestone for the free software community".

Sun released the source code of the Class library under GPL on May 8, 2007, except some limited parts that were licensed by Sun from third parties who did not want their code to be released under a free software and open-source license. Some of the encumbered parts turned out to be fairly key parts of the platform such as font rendering and 2D rasterising, but these were released as open-source later by Sun (see OpenJDK Class library).

Sun's goal was to replace the parts that remain proprietary and closed-source with alternative implementations and make the class library completely free and open source. In the meantime, a third-party project called IcedTea created a completely free and highly usable JDK by replacing encumbered code with either stubs or code from GNU Classpath. However OpenJDK has since become buildable without the encumbered parts (from OpenJDK 6 b10) and has become the default runtime environment for most Linux distributions.

In June 2008, it was announced that IcedTea6 (as the packaged version of OpenJDK on Fedora 9) has passed the Technology Compatibility Kit tests and can claim to be a fully compatible Java 6 implementation.

Because OpenJDK is under the GPL, it is possible to redistribute a custom version of the JRE directly with software applications, rather than requiring the enduser (or their sysadmin) to download and install the correct version of the proprietary Oracle JRE onto each of their systems themselves.

Criticism

In most cases, Java support is unnecessary in Web browsers, and security experts recommend that it not be run in a browser unless absolutely necessary. It was suggested that, if Java is required by a few Web sites, users should have a separate browser installation specifically for those sites.

Generics

When generics were added to Java 5.0, there was already a large framework of classes (many of which were already deprecated), so generics were chosen to be implemented using erasure to allow for migration compatibility and re-use of these existing classes. This limited the features that could be provided by this addition as compared to some other languages. The addition of type wildcards made Java unsound.

Unsigned integer types

Java lacks native unsigned integer types. Unsigned data are often generated from programs written in C and the lack of these types prevents direct data interchange between C and Java. Unsigned large numbers are also used in many numeric processing fields, including cryptography, which can make Java less convenient to use for these tasks. Although it is possible to partially circumvent this problem with conversion code and using larger data types, it makes using Java cumbersome for handling the unsigned data. While a 32-bit signed integer may be used to hold a 16-bit unsigned value with relative ease, a 32-bit unsigned value would require a 64-bit signed integer. Additionally, a 64-bit unsigned value cannot be stored using any integer type in Java because no type larger than 64 bits exists in the Java language. If abstracted using functions, function calls become necessary for many operations which are native to some other languages. Alternatively, it is possible to use Java's signed integers to emulate unsigned integers of the same size, but this requires detailed knowledge of complex bitwise operations.

Floating point arithmetic

While Java's floating point arithmetic is largely based on IEEE 754 (Standard for Binary Floating-Point Arithmetic), certain features are not supported even when using the strictfp modifier, such as Exception Flags and Directed Roundings – capabilities mandated by IEEE Standard 754. Additionally, the extended precision floating-point types permitted in 754 and present in many processors are not permitted in Java.

Performance

In the early days of Java (before the HotSpot VM was implemented in Java 1.3 in 2000) there were some criticisms of performance. Benchmarks typically reported Java as being about 50% slower than C (a language which compiles to native code).

Java's performance has improved substantially since the early versions. Performance of JIT compilers relative to native compilers has in some optimized tests been shown to be quite similar.

Java bytecode can either be interpreted at run time by a virtual machine, or it can be compiled at load time or runtime into native code which runs directly on the computer's hardware. Interpretation is slower than native execution, and compilation at load time or runtime has an initial performance penalty for the compilation. Modern performant JVM implementations all use the compilation approach, so after the initial startup time the performance is equivalent to native code.

Security

The Java platform provides a security architecture which is designed to allow the user to run untrusted bytecode in a "sandboxed" manner to protect against malicious or poorly written software. This "sandboxing" feature is intended to protect the user by restricting access to certain platform features and APIs which could be exploited by malware, such as accessing the local filesystem, running arbitrary commands, or accessing communication networks.

In recent years, researchers have discovered numerous security flaws in some widely used Java implementations, including Oracle's, which allow untrusted code to bypass the sandboxing mechanism, exposing users to malicious attacks. These flaws affect only Java applications which execute arbitrary untrusted bytecode, such as web browser plug-ins that run Java applets downloaded from public websites. Applications where the user trusts, and has full control over, all code that is being executed are unaffected.

On August 31, 2012, Java 6 and 7 (both supported back then) on Microsoft Windows, OS X, and Linux were found to have a serious security flaw that allowed a remote exploit to take place by simply loading a malicious web page. Java 5 was later found to be flawed as well.

On January 10, 2013, three computer specialists spoke out against Java, telling Reuters that it was not secure and that people should disable Java. Jaime Blasco, Labs Manager with AlienVault Labs, stated that "Java is a mess. It's not secure. You have to disable it." This vulnerability affects Java 7 and it is unclear if it affects Java 6, so it is suggested that consumers disable it. Security alerts from Oracle announce schedules of critical security-related patches to Java.

On January 14, 2013, security experts said that the update still failed to protect PCs from attack. This exploit hole prompted a response from the United States Department of Homeland Security encouraging users to disable or uninstall Java. Apple blacklisted Java in limited order for all computers running its OS X operating system through a virus protection program.

In 2014 and responding to then-recent Java security and vulnerability issues, security blogger Brian Krebs has called for users to remove at least the Java browser plugin and also the entire software. "I look forward to a world without the Java plugin (and to not having to remind readers about quarterly patch updates) but it will probably be years before various versions of this plugin are mostly removed from end-user systems worldwide." "Once promising, it has outlived its usefulness in the browser, and has become a nightmare that delights cyber-criminals at the expense of computer users." "I think everyone should uninstall Java from all their PCs and Macs, and then think carefully about whether they need to add it back. If you are a typical home user, you can probably do without it. If you are a business user, you may not have a choice."

Adware

The Oracle-distributed Java runtime environment has a history of bundling sponsored software to be installed by default during installation and during the updates which roll out every month or so. This includes the "Ask.com toolbar" that will redirect browser searches to ads and "McAfee Security Scan Plus". These offers can be blocked through a setting in the Java Control Panel, although this is not obvious. This setting is located under the "Advanced" tab in the Java Control Panel, under the "Miscellaneous" heading, where the option is labelled as an option to suppress "sponsor offers".

Politics of Europe

From Wikipedia, the free encyclopedia ...