C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Java 8 FeaturesOracle released a new version of Java as Java 8 in March 18, 2014. It was a revolutionary release of the Java for software development platform. It includes various upgrades to the Java programming, JVM, Tools and libraries. Java 8 Programming Language EnhancementsJava 8 provides following features for Java Programming:
Lambda ExpressionsLambda expression helps us to write our code in functional style. It provides a clear and concise way to implement SAM interface(Single Abstract Method) by using an expression. It is very useful in collection library in which it helps to iterate, filter and extract data. For more information and examples: click here Method ReferencesJava 8 Method reference is used to refer method of functional interface . It is compact and easy form of lambda expression. Each time when you are using lambda expression to just referring a method, you can replace your lambda expression with method reference. For more information and examples: click here Functional InterfaceAn Interface that contains only one abstract method is known as functional interface. It can have any number of default and static methods. It can also declare methods of object class. Functional interfaces are also known as Single Abstract Method Interfaces (SAM Interfaces). For more information and examples: click here OptionalJava introduced a new class Optional in Java 8. It is a public final class which is used to deal with NullPointerException in Java application. We must import java.util package to use this class. It provides methods to check the presence of value for particular variable. For more information and examples: click here forEachJava provides a new method forEach() to iterate the elements. It is defined in Iterable and Stream interfaces. It is a default method defined in the Iterable interface. Collection classes which extends Iterable interface can use forEach() method to iterate elements. This method takes a single parameter which is a functional interface. So, you can pass lambda expression as an argument. For more information and examples: click here Date/Time APIJava has introduced a new Date and Time API since Java 8. The java.time package contains Java 8 Date and Time classes. For more information and examples: click here Default MethodsJava provides a facility to create default methods inside the interface. Methods which are defined inside the interface and tagged with default keyword are known as default methods. These methods are non-abstract methods and can have method body. For more information and examples: click here Nashorn JavaScript EngineNashorn is a JavaScript engine. It is used to execute JavaScript code dynamically at JVM (Java Virtual Machine). Java provides a command-line tool jjs which is used to execute JavaScript code. You can execute JavaScript code by two ways:
For more information and examples: click here StringJoinerJava added a new final class StringJoiner in java.util package. It is used to construct a sequence of characters separated by a delimiter. Now, you can create string by passing delimiters like comma(,), hyphen(-) etc. For more information and examples: click here CollectorsCollectors is a final class that extends Object class. It provides reduction operations, such as accumulating elements into collections, summarizing elements according to various criteria etc. For more information and examples: click here Stream APIJava 8 java.util.stream package consists of classes, interfaces and an enum to allow functional-style operations on the elements. It performs lazy computation. So, it executes only when it requires. For more information and examples: click here Stream FilterJava stream provides a method filter() to filter stream elements on the basis of given predicate. Suppose, you want to get only even elements of your list, you can do this easily with the help of filter() method. This method takes predicate as an argument and returns a stream of resulted elements. For more information and examples: click here Java Base64 Encoding and DecodingJava provides a class Base64 to deal with encryption and decryption. You need to import java.util.Base64 class in your source file to use its methods. This class provides three different encoders and decoders to encrypt information at each level. For more information and examples: click here Java Parallel Array SortingJava provides a new additional feature in Arrays class which is used to sort array elements parallelly. The parallelSort() method has added to java.util.Arrays class that uses the JSR 166 Fork/Join parallelism common pool to provide sorting of arrays. It is an overloaded method. For more information and examples: click here Java 8 Security Enhancements1) The Java Secure Socket Extension(JSSE) provider enables the protocols Transport Layer Security (TLS) 1.1 and TLS 1.2 by default on the client side. 2) A improved method AccessController.doPrivileged has been added which enables code to assert a subset of its privileges, without preventing the full traversal of the stack to check for other permissions. 3) Advanced Encryption Standard (AES) and Password-Based Encryption (PBE) algorithms, such as PBEWithSHA256AndAES_128 and PBEWithSHA512AndAES_256 has been added to the SunJCE provider. 4) Java Secure Socket Extension (SunJSSE) has enabled Server Name Indication (SNI) extension for client applications by default in JDK 7 and JDK 8 supports the SNI extension for server applications. The SNI extension is a feature that extends the SSL/TLS protocols to indicate what server name the client is attempting to connect to during handshaking. 5) The SunJSSE is enhanced to support Authenticated Encryption with Associated Data (AEAD) algorithms. The Java Cryptography Extension (SunJCE) provider is enhanced to support AES/GCM/NoPadding cipher implementation as well as Galois/Counter Mode (GCM) algorithm parameters. 6) A new command flag -importpassword is added to the keytool utility. It is used to accept a password and store it securely as a secret key. Classes such as java.security.DomainLoadStoreParameter andjava.security.PKCS12Attribute is added to support DKS keystore type. 7) In JDK 8, the cryptographic algorithms have been enhanced with the SHA-224 variant of the SHA-2 family of message-digest implementations. 8) Enhanced support for NSA Suite B Cryptography which includes:
9) SecureRandom class provides the generation of cryptographically strong random numbers which is used for private or public keys, ciphers and signed messages. The getInstanceStrong() method was introduced in JDK 8, which returns an instance of the strongest SecureRandom. It should be used when you need to create RSA private and public key. SecureRandom includes following other changes:
10) A new PKIXRevocationChecker class is included which checks the revocation status of certificates with the PKIX algorithm. It supports best effort checking, end-entity certificate checking, and mechanism-specific options. 11) The Public Key Cryptography Standards 11 (PKCS) has been expanded to include 64-bit supports for Windows. 12) Two new rcache types are added to Kerberos 5. Type none means no rcache at all, and type dfl means the DFL style file-based rcache. Also, the acceptor requested subkey is now supported. They are configured using the sun.security.krb5.rcache and sun.security.krb5.acceptor.subkey system properties. 13) In JDK 8, Kerberos 5 protocol transition and constrained delegation are supported within the same realm. 14) Java 8 has disabled weak encryption by default. The DES-related Kerberos 5 encryption types are not supported by default. These encryption types can be enabled by adding allow_weak_crypto=true in the krb5.conf file. 15) You can set server name to null to denote an unbound server. It means a client can request for the service using any server name. After a context is established, the server can retrieve the name as a negotiated property with the key name SASL.BOUND_SERVER_NAME. 16) Java Native Interface (JNI) bridge to native Java Generic Security Service (JGSS) is now supported on Mac OS X. You can set system property sun.security.jgss.native to true to enable it. 17) A new system property, jdk.tls.ephemeralDHKeySize is defined to customize the ephemeral DH key sizes. The minimum acceptable DH key size is 1024 bits, except for exportable cipher suites or legacy mode (jdk.tls.ephemeralDHKeySize=legacy). 18) Java Secure Socket Extension (JSSE) provider honors the client's cipher suite preference by default. However, the behavior can be changed to respect the server's cipher suite preference by calling SSLParameters.setUseCipherSuitesOrder(true) over the server. Java 8 Tools Enhancements1) A jjs command is introduced, which invokes the Nashorn engine either in interactive shell mode, or to interpret script files. 2) The java command is capable of launching JavaFX applications, provided that the JavaFX application is packaged correctly. 3) The java command man page (both nroff and HTML) has been completely reworked. The advanced options are now divided into Runtime, Compiler, Garbage Collection, and Serviceability, according to the area that they affect. Several previously missing options are now described. There is also a section for options that were deprecated or removed since the previous release. 4) New jdeps command-line tool allows the developer to analyze class files to determine package-level or class-level dependencies. 5) You can access diagnostic commands remotely, which were previously accessible only locally via the jcmd tool. Remote access is provided using the Java Management Extensions (JMX), so diagnostic commands are exposed to a platform MBean registered to the platform MBean server. The MBean is the com.sun.management.DiagnosticCommandMBean interface. 6) A new option -tsapolicyid is included in the jarsigner tool which enables you to request a signed time stamp from a Time Stamping Authority and attach it to a signed JAR file. 7) A new method java.lang.reflect.Executable.getParameters is included which allows you to access the names of the formal parameters of any method or constructor. However, .class files do not store formal parameter names by default. To store formal parameter names in a particular .class file, and thus enable the Reflection API to retrieve formal parameter names, compile the source file with the -parameters option of the javac compiler. 8) The type rules for binary comparisons in the Java Language Specification (JLS) Section 15.21 will now be correctly enforced by javac. 9) In this release, the apt tool and its associated API contained in the package com.sun.mirror have been removed. Javadoc EnhancementsIn Java SE 8, the following new APIs were added to the Javadoc tool.
Pack200 EnhancementsThe Java class file format has been updated because of JSR 292 which Supports Dynamically Typed Languages on the Java Platform. The Pack200 engine has been updated to ensure that Java SE 8 class files are compressed effectively. Now, it can recognize constant pool entries and new bytecodes introduced by JSR 292. As a result, compressed files created with this version of the pack200 tool will not be compatible with older versions of the unpack200 tool. Java 8 I/O EnhancementsIn Java 8, there are several improvements to the java.nio.charset.Charset and extended charset implementations. It includes the following:
Java 8 Networking Enhancements1) A new class java.net.URLPermission has been added. It represents a permission for accessing a resource defined by a given URL. 2) A package jdk.net has been added which contains platform specific socket options and a mechanism for setting these options on all of the standard socket types. The socket options are defined in jdk.net.ExtendedSocketOptions. 3) In class HttpURLConnection, if a security manager is installed, and if a method is called which results in an attempt to open a connection, the caller must possess either a "connect"SocketPermission to the host/port combination of the destination URL or a URLPermission that permits this request. If automatic redirection is enabled, and this request is redirected to another destination, the caller must also have permission to connect to the redirected host/URL. Java 8 Concurrency EnhancementsThe java.util.concurrent package added two new interfaces and four new classes. Java.util.concurrent Interfaces
Java.util.concurrent Classes
New Methods in java.util.concurrent.ConcurrentHashMap classConcurrentHashMap class introduces several new methods in its latest release. It includes various forEach methods (forEach, forEachKey, forEachValue, and forEachEntry), search methods (search, searchKeys, searchValues, and searchEntries) and a large number of reduction methods (reduce, reduceToDouble, reduceToLong etc.). Other miscellaneous methods (mappingCount and newKeySet) have been added as well. New classes in java.util.concurrent.atomicLatest release introduces scalable, updatable, variable support through a small set of new classes DoubleAccumulator, DoubleAdder, LongAccumulator andLongAdder. It internally employ contention-reduction techniques that provide huge throughput improvements as compared to Atomic variables.
New methods in java.util.concurrent.ForkJoinPool ClassThis class has added two new methods getCommonPoolParallelism() and commonPool(), which return the targeted parallelism level of the common pool, or the common pool instance, respectively.
New class java.util.concurrent.locks.StampedLockA new class StampedLock is added which is used to add capability-based lock with three modes for controlling read/write access (writing, reading, and optimistic reading). This class also supports methods that conditionally provide conversions across the three modes.
Java API for XML Processing (JAXP) 1.6 EnhancementsIn Java 8, Java API is added for XML Processing (JAXP) 1.6. It requires the use of the service provider loader facility which is defined by java.util.ServiceLoader to load services from service configuration files. The rationale for this is to allow for future modularization of the Java SE platform where service providers may be deployed by means other than JAR files and perhaps without the service configuration files. Java Virtual Machine EnhancementsThe verification of invokespecial instructions has been tightened so that only an instance initialization method in the current class or its direct super class may be invoked. Java Mission Control 5.3 is included in Java 8Java Mission Control (JMC) is an advanced set of tools that enables efficient and detailed data analysis and delivers advanced, unobtrusive Java monitoring and management. JMC provides sections for common analysis areas such as code performance, memory and latency. Babel Language Packs in Japanese and Simplified Chinese are now included by default in the Java Mission Control that is included in the JDK 8. Java 8 Internationalization Enhancements1) Unicode EnhancementsThe JDK 8 includes support for Unicode 6.2.0. It contains the following features.
Adoption of Unicode CLDR Data and the java.locale.providers System PropertyThe Unicode Consortium has released the Common Locale Data Repository (CLDR) project to "support the world's languages, with the largest and most extensive standard repository of locale data available." The CLDR is becoming the de-facto standard for locale data. The CLDR's XML-based locale data has been incorporated into the JDK 8 release, however it is disabled by default. There are four distinct sources for locale data:
To select the desired locale data source, use the java.locale.providers system property. listing the data sources in the preferred order. For example: java.locale.providers=HOST,SPI,CLDR,JRE The default behavior is equivalent to the following setting: java.locale.providers=JRE,SPI Java 8 New Calendar and Locale APIsThe JDK 8 includes two new classes, several new methods, and a new return value for an existing static method. Two new abstract classes for service providers are added to the java.util.spi package.
A static method is now able to recognize Locale.UNICODE_LOCALE_EXTENSION for the numbering system.
Added New methods in calender API:
New style specifiers are added for the Calendar.getDisplayName and Calendar.getDisplayNames methods to determine the format of the Calendar name.
Two new Locale methods for dealing with a locale's (optional) extensions.
Two new Locale.filter methods return a list of Locale instances that match the specified criteria, as defined in RFC 4647:
Two new Locale.filterTags methods return a list of language tags that match the specified criteria, as defined in RFC 4647.
Two new lookup methods return the best-matching locale or language tag using the lookup mechanism defined in RFC 4647.
Other Java 8 Version EnhancementsEnhancements in JDK 8u51) The frequency in which the security prompts are shown for an application has been reduced. Enhancements in JDK 8u111) An option to suppress offers from sponsors when the JRE is installed or updated is available in the Advanced tab of the Java Control Panel. 2) The Entry-Point attribute can be included in the JAR file manifest to identify one or more classes as a valid entry point for your RIA(Rich Internet application). Enhancements in JDK 8u201) The javafxpackager tool has been renamed to javapackager. This tool has been enhanced with new arguments for self-contained application bundlers. Follwing enhancements are related to the java tool:
2) Garbage Collection Tuning Guide has been added to the Java HotSpot Virtual Machine. It describes the garbage collectors included with the Java HotSpot VM and helps you to decide which garbage collector can best optimize the performance of your application, especially if it handles large amounts of data (multiple gigabytes), has many threads, and has high transaction rates. Enhancements in JDK 8u311) In this release, the SSLv3 protocol is removed from the Java Control Panel Advanced options. Enhancements in JDK 8u40Java tool1) The -XX:+CheckEndorsedAndExtDirs has been added because the endorsed-standards override mechanism (JDK-8065675) and the extension mechanism (JDK-8065702) have been deprecated. The option helps identify any existing uses of these mechanisms and is supported in JDK 7u80 and JDK 8u40. 2) Java Flight Recorder (JFR) offers a variety of ways to unlock commercial features and enable JFR during the runtime of an application. It includes java command line options such as jcmd diagnostic commands and Graphical User Interface (GUI) controls within Java Mission Control. This flexibility enables you to provide the appropriate options at startup, or interact with JFR later. 3) The option -XX:StartFlightRecording=parameter=value has a new parameter, dumponexit={true|false}, which specifies whether a dump file of JFR data should be generated when the JVM terminates in a controlled manner. 4) The options related to Restricted Transactional Memory (RTM) are no longer experimental. These options include -XX:RTMAbortRatio=abort_ratio, -XX:RTMRetryCount=number_of_retries, -XX:+UseRTMDeopt, and -XX:+UseRTMLocking. 5) In Java 8, Application Class Data Sharing (AppCDS) has been introduced. AppCDS extends CDS (Class Data Sharing) to enable classes from the standard extensions directories and the application class path to be placed in the shared archive. This is a commercial feature and is no longer considered experimental. 6) New options -XX:+ResourceManagement and -XX:ResourceManagementSampleInterval=value have been added. 7) Additional information about large pages has been added. Large Pages, also known as huge pages, are memory pages that are significantly larger than the standard memory page size. Large pages optimize processor Translation-Lookaside Buffers. The Linux options -XX:+UseHugeTLBFS, -XX:+UseSHM, and -XX:+UseTransparentHugePages have been documented. 8) The option -XX:ObjectAlignmentInBytes=alignment has been documented. JJS tool1) The option --optimistic-types=[true|false] has been added. It enables or disables optimistic type assumptions with deoptimizing recompilation. 2) The option --language=[es5] has been added to the jjs tool. It specifies the ECMAScript language version. Javapackager tool1) New arguments are available for OS X bundlers. The mac.CFBundleVersion argument identifies the internal version number to be used. 2) The mac.dmg.simple argument indicates if DMG customization steps that depend on executing AppleScript code are skipped. Jcmd toolJcmd tool is used to dynamically interact with Java Flight Recorder (JFR). You can use it to unlock commercial features, enable/start/stop flight recordings, and obtain various status messages from the system. Jstat toolThe jstat tool has been updated with information about compressed class space which is a special part of metaspace. Virtual machineThe Scalable Native Memory Tracking HotSpot VM feature helps diagnose VM memory leaks and clarify users when memory leaks are not in the VM. Native Memory Tracker can be run without self-shutdown on large systems and without causing a significant performance impact beyond what is considered acceptable for small programs.
Next TopicJava 8 Lambda Expressions
|