Apache Mnemonic is now a Top-Level Project

The Apache Software Foundation has announced Apache Mnemonic is graduating from the Apache Incubator to become a Top-Level Project. This signifies the project’s progress and success.

Apache Mnemonic is an open-source object platform for processing and analysis of linked objects, according to the foundation. It is designed to address Big Data performance issues such as serialization, caching, computing bottlenecks, and non-volatile memory storage media.

“The Mnemonic community continues to explore new ways to significantly improve the performance of real-time Big Data processing/analytics,” said Gang “Gary” Wang, vice president of Apache Mnemonic. “We worked hard to develop both our code and community the Apache Way, and are honored to graduate as an Apache Top-Level Project.”

The Java-based project includes a unified platform enabling framework, a durable object model and computing model, an extensible focal point for optimization, and integration with Big Data projects like Apache Hadoop and Apache Spark. The project has been used in industries like eCommerce, financial services and semiconductors.

“Apache Mnemonic fills the void of the ability to directly persist on-heap objects, making it beneficial for use in production to accelerate Big Data processing applications at several large organizations,” said Henry Saputra, ASF member and Apache Mnemonic incubating mentor. “I am pleased how the community has grown and quickly embraced the Apache Way of software development and making progressive releases. It has been a great experience to be part of this project.”

With the project, objects can be directly accessed or accessed through other computing languages such as C and C/++. According to the team’s website, it is currently working on pure Java memory service, durable object vectorization and durable query service features.

“Apache Mnemonic provides a unified interface for memory management,” said Yanhui Zhao, Apache Mnemonic committer. “It is playing a significant role in reshaping the memory management in current computer architecture along with the developments of large capacity NVMs, making a smooth transition from present mechanical-based storage to flash-based storage with the minimum cost.”

Majority of Java apps are vulnerable  to hack attacks

Java developers should be more aware of the open source software components they put in their applications if they want to avoid a security breach. A new report release by Veracode, a CA Technologies company, revealed 88% of Java apps include at least one vulnerable component, and about 53.3% of Java apps rely on a vulnerable version of the Commons Collections components.

“The universal use of components in application development means that when a single vulnerability in a single component is disclosed, that vulnerability now has the potential to impact thousands of applications — making many of them breachable with a single exploit,” said Chris Wysopal, CTO of CA Veracode.

According to the company, the main reason applications become vulnerable is because developers don’t often patch their applications when new vulnerabilities are found or new versions of their components are released. The report, the 2017 State of Software Security Report, found only 28% of organizations conduct composition analysis to track and monitor their application’s components. This becomes a problem when about 75% of application code is made up of open source components.

“Development teams aren’t going to stop using components — nor should they. But when an exploit becomes available, time is of the essence. Open source and third party components aren’t necessarily less secure than code you develop in-house, but keeping an up-to-date inventory of what versions of a component you are using. We’ve now seen quite a few breaches as a result of vulnerable components and unless companies start taking this threat more seriously, and using tools to monitor component usage, I predict the problem will intensify,” said Wysopal.

For instance, when the “Struts-Shock” flaw was disclosed in March of this year, 68% of Java applications using the Apache Struts 2 library were using a vulnerable version of the component, leaving about 35 million sites vulnerable, according to the company.

Other key findings of the report included: 77% of apps have at least one vulnerability on initial scan; governmental organizations have a 24.7% pass rate at latest scan; and critical infrastructure had the strongest OWASP pass rate across all industries.

The report is based off of CA Veracode’s application security testing data from more than 1,400 of its customers.

Report: Android developers are switching from Java to Kotlin

Google surprised Android developers back in May when it announced for the first time it was adding a new programming language to the operating system. Since then, Kotlin language adoption has exploded among developers so much that it is set to overtake Java in the next couple of years, according to a new report.

Realm, a real-time mobile platform provider, announced the first edition of the Realm Report. The report takes an in-depth look at the mobile development world based on the analysis of its more than 100,000 active developers.

Kotlin is a statically typed programming language developed by JetBrains for JVM, Android, JS browser and native applications. According to the Realm Report, since August 2015, the number of applications built with Kotlin has increased by 125%, and about 20% of Kotlin applications today were previously built with Java.

In addition, the report found the number of Android apps built with Java has decreased by 6.1% over the past four months. Realm predicts by December 2018 Kotlin will overtake Java for Android development similarly to how the Swift programming language overtook Objective C for iOS app development.

Realm notes the rapid adoption of Kotlin and Swift point to an ongoing migration to modern programming languages. “There are seven major languages for mobile platforms today, but the balance of power is quickly shifting. Not too long ago, Swift didn’t exist. Now, it towers over Objective-C for iOS developers,” according to the report.

“Given the position of the Realm Mobile Database as the world’s most popular independent in-app mobile database, we have unique insight into what developers are using to build next-generation, responsive mobile apps that meet consumer and business demands,” said Alexander Stigsen, CEO and co-founder of Realm. “By analyzing the choices developers make on programming tools, languages and platforms, the Realm Report provides the mobile community with actionable insights on the best approaches for building breakthrough experiences.”

Microsoft Azure adds support for Java in Azure Functions

Microsoft Azure announced the preview of Java support in Azure Functions. The company announced recently the ability to run Azure Functions on .NET Core, and are beginning to add broadened support for different programming languages, Java being the first.

This new Java runtime will have the same features as Azure Functions and will allow Java developers to develop using Azure Functions without needing any additional tools. Azure Functions can be developed and debugged locally using many of the popular IDEs, including Eclipse.

Which Programming Language Should I Learn To Get A Job At Google, Facebook, or Amazon?

The choice of programming language acts as a big factor for a novice in the world of programming. If one stumbles upon a language whose syntax is too complex, one would definitely reconsider learning it. But, what if you’ve crossed that entry barrier and you’re looking to make a career and land a job at heavyweights like Google, Facebook, or Amazon?

You might have come across the articles that tell which programming languages are used at big companies like Google, Facebook, etc. The choice of those companies doesn’t necessarily reflect their needs while hiring a candidate. There are few chances that they’d be interested to interview someone who is expert in a single programming language.

Similar views were also expressed by Justin Mattson, Senior Software Engineer, Fuschia at Google. He answered a user’s query on Quora (via Inc.).

In his answer, Mattson says that if a company is hung up on the fact that you know a language X, but not language Y, you shouldn’t be interested in working there. ” Languages are a tool, like a saw. Whether the saw is manual, table or laser is less relevant than understanding the basic principles of wood and how cutting it happens,” he writes.

There are chances that a person is expert in a popular programming language, but that doesn’t make him/her a good engineer. Different programming languages teach us different things–C and C++ teach you what’s happening with memory and other low-level operations and Java, Ruby, etc., test your design choices. So, it’s important that you learn more languages.

“Don’t learn just one, learn at least two, hopefully, three. This will give you a better sense of what feature are often common to most languages and what things differ,” Mattson adds.

But, what about expertise in a single programming language?


Is having complete command over one language completely irrelevant? Answering this question, Mattson says that one must become an expert in the language one uses, instead of focusing on what a company wants. “If you say you’re an expert in Python and then can’t use it properly in the interview, that is a problem,” he adds.

In the nutshell, if your fundamentals and design choices are strong, the programming language selection isn’t that important. In such companies, you’ll need to deal with multiple languages and pick up the new one as needed.

Introducing Atom-IDE

GitHub, in collaboration with Facebook, are pleased to announce the launch of Atom-IDE – a set of optional packages to bring IDE-like functionality to Atom.

The start of this journey includes smarter context-aware auto-completion as well as a host of code navigation features such as an outline view, go to definition, find all references as well as other useful functions such as hover-to-reveal information, errors and warnings (diagnostics) and document formatting.

Our initial release includes packages for TypeScript, Flow, JavaScript, Java, C# and PHP that utilize the power of language servers to provide deep syntactical analysis of your code and projects. The language server protocol is being adopted by a number of organizations including Microsoft, Eclipse, Sourcegraph, Palantir, Red Hat, Facebook and now GitHub too!

Get started


We strongly recommended you use Atom Beta 1.21 as it includes the necessary file monitoring and process control to ensure the underlying language servers are running properly.

You’ll need to install at least two packages – the user interface for Atom IDE and a package that support the language you wish to use:

  1. Bring up Atom’s Install Packages dialog (Settings View: Install Packages and Themes)
  2. Search for and install the atom-ide-ui package to bring in the IDE user interface
  3. Install the IDE language support you need (e.g. ide-typescript) – a summary of the ones available at launch include:

TypeScript & JavaScript (ide-typescript)


The ide-typescript package takes advantage of the Microsoft TypeScript server wrapped up in a language server protocol thanks to the work of the team at SourceGraph. While targeted at TypeScript it also works great with JavaScript providing you with autocompletion, document outlines, diagnostics and errors, etc.

Flow (ide-flowtype)

Our good friends over at Facebook have published ide-flowtype to bring the power of the Flow type annotation system to Atom.

C# (ide-csharp)

One of the earliest examples of a language server was OmniSharp for the C# language. By taking advantage of the node-omnisharp package we are able to bring many IDE-like features into Atom for C# via ide-csharp.

Java (ide-java)

The Eclipse foundation and Red Hat have been a big proponent of language servers and the Java package shows! You will need a Java 8 runtime installed to get going but then can enjoy much richer editor facilities. Check out ide-java.

PHP (ide-php)

The ide-php utilizes a PHP language server by FelixFBecker to provide support for the PHP scripting language. (Requires the PHP 7 runtime installed.)

Using Atom-IDE

Each of the IDE packages expose a selection of functionality that is dependent on the underlying language server and is activated when you open files it supports. (Some take a few seconds to start-up and others like ide-java and ide-php will take a short while on first open to download the language server itself.)

Here’s a quick summary of how these features are exposed within Atom IDE:


Autocomplete is enabled in all the ide packages we are shipping today. Start typing to get improved results. Some providers may require you to manually trigger autocompletion by pressing CtrlSpace for performance reasons.


You can see diagnostics by clicking the red exclamation mark and yellow warning triangle at the bottom left of your Atom window. This will open the new Diagnostics pane that shows you the errors and warnings and allow you to click them to jump right to that location in the code. You will also see indicators to the left of line numbers in the editor itself.

Find all references

Position the text cursor in the class or variable you are interested in then activate Find all references either from the right-mouse button menu or Find References: Activate from the command palette.

Some providers allow you to reformat the document. Simply select Code Format: Format Code from the command palette.


Go to definition


Ctrl click on a class or variable reference to be taken directly to where it is defined within your project.



Hover the mouse pointer over a type or other supported object and you can see some additional information relating to it.

Outline view


Many providers let you see a tree-based outline view of the current document which you can search and then click to go right to that area of code. You can toggle the new Outline View from the View menu or the Outline View: Toggle command.

Reference highlighting


Some providers let you see immediate references to the variable or object you are working on. Positioning your text cursor within that variable can highlight other references instantly.

Future plans


This is just the start of our journey. With the help of our community, we plan to expand the number of languages that Atom-IDE can support and make it possible for you to run and edit applications, making Atom-IDE a true IDE.

We hope to see future language support for the great languages out there including Rust, Go, Python, etc.

If a language server exists for your favorite language it is incredibly easy to create your own Atom-IDE package that takes advantage of it by using our atom-languageclient npm library that provides common automatic wire-up of the major features as well as helper tools such as downloading support files and conversions.


Java, JavaScript, C#? No, Python is the fastest growing programming language

Python is now the fastest-growing major programming language, according to Stack Overflow.


Already highly popular, Python could also be the fastest-growing major programming language, according to Stack Overflow, a site that helps developers solve coding questions.

The company estimates Python’s growing popularity based on the percentage of visits to pages containing questions with a Python tag.

This method should provide a reasonable indicator of trends in programming languages since the site attracts about 40 million visitors a month, of which an estimated 16.8 million visitors are professional developers and university-level students.

In June for the first time, visits to Python-tagged questions edged past Java and JavaScript, which historically have had the highest share of visits from users in high-income nations, such as the US, UK, and Germany.

Other languages that Stack Overflow considers major include C#, PHP, and C++, but not Apple’s Swift, Google’s Go, and Microsoft’s TypeScript.

“We make the case that Python has a solid claim to being the fastest-growing major programming language,” said Stack Overflow data scientist David Robinson.

Python has become the most visited tag in the US and UK, and is in the top two in most other high-income nations, which include Canada, countries in Western Europe, and Australia and New Zealand.

The popularity of languages is influenced by factors such as education and wealth. Since Java is widely taught in undergraduate classes, its traffic rises in fall and spring and declines in summer.

Among countries not considered wealthy, Python is the eighth most-visited tag. There has also been more interest in R from high-income nations than poorer nations.

This pattern may be due to Python’s and R’s use in science and academic research, which generally form a larger part of wealthier nations’ economy than less developed nations, Robinson has previously suggested.

However, even in non-wealthy nations, Python is the fastest-growing major language and is actually growing faster year on year than in wealthy countries.

Robinson predicts that traffic to Python-tagged questions will continue to grow next year while traffic to JavaScript and Java will remain static.

Other fast-growing but less-popular languages include Microsoft’s TypeScript, Apple’s Swift, Rust, and the Google-developed Go. However Python stands out as an already popular language that is also fast growing.

“Python is an unusual case for being both one of the most visited tags on Stack Overflow and one of the fastest-growing ones. Incidentally, it is also accelerating. Its year-over-year growth has become faster each year since 2013,” writes Robinson.

Python also ranked highly in Stack Overflow’s 2017 developer survey, which found it was the fifth most popular language behind JavaScript, SQL, Java, and C#. It was also the top language respondents wanted to learn.

However, IEEE Spectrum earlier this year ranked Python as the top language, ahead of C, Java, C++, C#, R, JavaScript PHP, Google’s Go, and Apple’s Swift.



Top 5 machine learning libraries for Java

Companies are scrambling to find enough programmers capable of coding for ML and deep learning. Are you ready? Here are five of our top picks for machine learning libraries for Java.

The long AI winter is over. Instead of being a punchline, machine learning is one of the hottest skills in tech right now. Companies are scrambling to find enough programmers capable of coding for ML and deep learning. While no one programming language has won the dominant position, here are five of our top picks for ML libraries for Java.


It comes as no surprise that Weka is our number one pick for the best Java machine learning library. Weka 3 is a fully Java-based workbench best used for machine learning algorithms. Weka is primarily used for data mining, data analysis, and predictive modelling. It’s completely free, portable, and easy to use with its graphical interface.

“Weka’s strength lies in classification, so applications that require automatic classification of data can benefit from it, but it also supports clustering, association rule mining, time series prediction, feature selection, and anomaly detection,” said Prof. Eibe Frank, an Associate Professor of Computer Science at the University of Waikato in New Zealand.

Weka’s collection of machine learning algorithms can be applied directly to a dataset or called from your own Java code. This supports several standard data mining tasks, including data preprocessing, classification, clustering, visualization, regression, and feature selection.

MOA is an open-source software used specifically for machine learning and data mining on data streams in real time. Developed in Java, it can also be easily used with Weka while scaling to more demanding problems. MOA’s collection of machine learning algorithms and tools for evaluation are useful for regression, classification, outlier detection, clustering, recommender systems, and concept drift detection. MOA can be useful for large evolving datasets and data streams as well as the data produced by the devices of the Internet of Things (IoT).

MOA is specifically designed for machine learning on data streams in real time. It aims for time- and memory-efficient processing. MOA provides a benchmark framework for running experiments in the data mining field by providing several useful features including an easily extendable framework for new algorithms, streams, and evaluation methods; storable settings for data streams (real and synthetic) for repeatable experiments; and a set of existing algorithms and measures from the literature for comparison.


Last year the JAXenter community nominated Deeplearning4j as one of the most innovative contributors to the Java ecosystem. Deeplearning4j is a commercial grade, open-source distributed deep-learning library in Java and Scala brought to us by the good people (and semi-sentient robots!) of Skymind. It’s mission is to bring deep neural networks and deep reinforcement learning together for business environments.

Deeplearning4j is meant to serve as DIY tool for Java, Scala and Clojure programmers working on Hadoop, the massive distributed data storage system with enormous processing power and the ability to handle virtually limitless concurrent tasks or jobs. The deep neural networks and deep reinforcement learning are capable of pattern recognition and goal-oriented machine learning. All of this means that Deeplearning4j is super useful for identifying patterns and sentiment in speech, sound and text. Plus, it can be used for detecting anomalies in time series data like financial transactions.


Developed primarily by Andrew McCallum and students from UMASS and UPenn, MALLET is an open-source java machine learning toolkit for language to text. This Java-based package supports statistical natural language processing, clustering, document classification, information extraction, topic modelling, and other machine learning applications to text.

MALLET’s specialty includes sophisticated tools for document classification such as efficient routines for converting text. It supports a wide variety of algorithms (including Naïve Bayes, Decision Trees, and Maximum Entropy) and code for evaluating classfier performance. Also, MALLET includes tools for sequence tagging and topic modelling.


The Environment for Developing KDD-Applications Supported by Index Structures (ELKI for short) is an open-source data mining software for Java. ELKI’s focus is in research in algorithms, emphasizing unsupervised methods in cluster analysis, database indexes, and outlier detection. ELKI allows an independent evaluation of data mining algorithms and data management tasks by separating the two. This feature is unique among other data mining frameworks like Weta or Rapidminer. ELKI also allows arbitrary data types, file formats, or distance or similarity measures.

Designed for researchers and students, ELKI provides a large collection of highly configurable algorithm parameters. This allows fair and easy evaluation and benchmarking of algorithms. This means ELKI is particularly useful for data science; ELKI has been used to cluser sperm whale vocalizations, spaceflight operations, bike sharking redistribution, and traffic prediction. Pretty useful for any grad students out there looking to make sense of their datasets!


Do you have a favorite machine learning library for Java that we didn’t mention? Tell us in the comments and explain why it’s a travesty we forgot about it!

Skype testing real time code editor feature for Skype.com

Microsoft is currently working on a real time code editor for its Skype.com. The feature will allow people to conduct coding and technical interview without having to switch between a Skype call and code editing application.

This feature provides users with assistance in the form of video call on top of the code editor.The feature currently works with Microsoft Edge or Google Chrome browsers meaning users would need access to only Skype.com on the above browsers.

The editor supports seven programming languages like C, C++, C#, java, Javascript, Python and Ruby. A real time execution feature will be included in the coming updates. However for this feature to work in the Browsers the default language needs to be set to English only.

Users would need to visit Skype.com/interviews and click on “Start interview” and will be provided with a unique link that can be accessed by a participant. During the interview programming languages can also be changed by clicking the button which is found on the upper left hand side of the screen. The video call is started once you click on “Start Video Interview” Button.

JDK 9 is almost here. Again.

JDK 9 is less than three weeks away at the time of the writing and one of the burning questions is whether it has been worth the wait. Originally, general availability was slated for release in September 2016, then March 2017, July 2017 and finally September 2017. So, it’s taken some time, but when you update a programming language as a community, progress is slower than if a vendor does it single-handedly. There’s still work to be done, including bug fixes, which will come later.

Interestingly, not many Java developers seem to want to talk about Java 9. Red Hat, which occupies two seats on the Java Community Process (JCP) Executive Committee, wasn’t able to respond in time for publication, according to a spokesperson. (Red Hat and IBM have had differences with Oracle concerning what JDK 9’s modularity should look like, which is not surprising). A Cisco engineer using JDK 8 wasn’t even aware that JDK 9 was almost ready for general release.

Part of the problem may be that there’s not a lot of Java 9 information available yet.

“I was super excited about 9 because everyone’s talking about the whole Jigsaw thing. Then I opened up some videos and all the people on the video told me to wait. Based on their statements, the instructions I’ve read and examples of things online, I have to say the same thing,” said John Alexander, senior software developer at Internet marketing service provider Zeeto who’s been using Java since 2004. “I can’t justifiably tell anybody at my company we can switch over right now and get all the benefits. There’s going to have to be research done, which is kind of scary.”

Alexander Volkov, a business analyst and architect at online brokerage software provider Devexperts is wholly unimpressed.

“Actually, [JDK 9] has no super compelling features as almost every feature is outdated and is a ‘catch-up’ of Java as a language and a platform to what is already available somewhere else, be it other languages, libraries or platforms,” he said.

Software development management consultant Eric Madrid has been using Java since the first version. He sees value in Java 9.

“9 is unique in that a lot of the Oracle obligations have been fulfilled. This is the first release of Java where the community gets what they’ve been asking for,” said Madrid. “We’ve had some tooling, more modular design and the big one I’m looking forward to is native interprocess communication.”

In February 2017 Oracle published a beta draft of the Java Access Bridge Architecture. Java Access Bridge is a collection of classes and DLLs that enable interprocess communication among assistive technologies and Java applications.

“There a thing called the Twelve-Factor App, which is the de facto standard for scaling, configuring, deploying, coding and testing software applications. One of the tenets is scale and how you scale is through interprocess communication,” said Madrid. “You have a process running on one machine and I want to directly communicate with a process on another machine. There are native ways of doing that. Java’s never allowed you to interact with a process directly, you had to go about it another way and use different layers and databases and messaging systems and things like that, but this is Java’s first attempt at building native scalable design.”

The migration to Java 9 from previous versions will be more difficult than previous migrations because Java 9 has a modular architecture and previous versions have a monolithic architecture. Developers want to see Java 9 support in their favorite tools and educational material that can help ease the path to migration.

“Other releases were effectively turnkey. You could get your applications to stand up with minor adjustments,” said Zeeto’s Alexander. “That’s definitely not going to be the case with 9. Aside from extremely simple trivial applications, there is going to be work that needs to be done just to get your application to run as opposed to refactoring it to be 100% modular and following the new suggested conventions. That’s an interesting concept because this is kind of a big request for us as developers to do.”

Madrid has been experimenting with JDK 9 and says he would hesitate to migrate to it until there’s more support for it.

“I have an opinion against migrating because writing code is hard enough. You have to have the right reasons to migrate and so migrating for the sake of just going to 9 would be kind of silly,” said Madrid. The conditions [under which] I would want to use 9 is do I have free range on implementation [and whether] the things I like about Java such as Spring and OS support are ready for 9. I think there’s some level of soaking that 9 needs to have before it’s adopted by a larger community like any new technology, but I think it will be well-received.”

JDK 9 has a lot of small enhancements and there are a number of features from previous versions that have been deprecated or removed. Following are some things worth noting.

Modularity is a big deal
JDK 9’s modularity makes sense in an era where all things large are being broken up into smaller pieces. In JDK 9’s case, the modular architecture enables greater scalability down to smaller devices. It also improves security, performance and maintainability.

Modularization has been a multi-year effort that wasn’t ready in time for JDK 8, which is why it’s introduced in JDK 9. The modularization can be problematic for applications developed with the earlier monolithic versions of the language.

“The story is simple: Your application will break. How many hoops will it take to get it back online?” said Zeeto’s Alexander. “Modularization at this point is verbose and add complexities. Java 9 will diverge all future library releases as ‘lib-9’ and ‘lib-legacy’ and [that] will definitely impact the community.”

A module is a self-describing collection of code and data that can be combined with other modules to achieve different configurations including Java Runtime Environment (JRE). The JRE modularization simplifies application testing and maintenance.

JDK 9 introduces a link time phase which occurs between compile and runtime. It allows developers to assemble a set of modules into a runtime and customize modules as necessary.

The Java compiler (javac) and linker (jlink: The Java Linker) tools enable developers to specify module paths that locate module definitions. Java Enhancement Proposal (JEP) 247 enhances javac so it can compile Java programs to run on selected older versions of the platform. JEP 282 (jlink) assembles and optimizes a set of modules and their dependencies into a custom runtime image that can be optimized for a single program.

Also new is the modular Java ARchive (JAR) file which is a JAR file that has the module-info.class file in its root directory and a MOD packaging format that can include native code and configuration files.

The module system also has a more concise version-string format that distinguishes major, minor, security and patch updates.

Instant code feedback
JEP 222 (JShell) adds Read-Eval-Print-Loop (REPL) functionality to the Java platform, which has been a feature of other languages including LISP and Scala. REPL is an important addition to JDK 9 because it provides developers with instant feedback as they write code. The capability is helpful for programmers who are new to Java and for experienced Java developers who want to learn how to use an API, a library or a feature. REPL helps improve developer productivity by preventing errors early in development.

Improved JVM Compilation and Performance
JEP 165 provides compiler directive options to control JVM compilation. The level of control is manageable at runtime and method-specific. This new feature supersedes and is backward compatible with CompileCommand.

JEP 197 segments code cache, with each segment containing a different type of compiled code to improve performance and enable future extensions.

JEP 276 dynamically links high-level object operations to the appropriate method handles at runtime based on the actual types of values passed. While dynamic linking is not a new feature, the new capability provides a way to express higher level operations on the objects and methods that implement them, unlike java.lang-invoke which is a low-level API.

JEP 158 introduces a common logging system for all JVM components. JEP 271 uses this unified framework to reimplement garbage collection (GC) for consistency between old and new formats, though the consistency is not absolute.

To improve user experience, JEP 248 makes G1 the default garbage collector on 32- and 64-bit server configurations. It replaces the Parallel GC, which has been used for a very long time. The reasoning is that a low latency-oriented collector is better than throughput-oriented collector for its intended purpose (user experience).

Core library enhancements
JEP 102 improves the API used to control and manage operating system processes. The ProcessHandle class provides the process’s process ID, arguments, command, start time, accumulated CPU time, user, parent process and descendants. The class can also monitor the liveness of processes and destroy processes. With ProcessHandle.onExitmethod, the asynchronous mechanisms of the CompletableFuture class can perform an action when the process exits.

JEP 193 defines three different things. The first is a standards means of invoking the equivalents of Java.util.concurrent.atomic and sun.misc.Unsafe.operations upon object fields and array elements. In older versions, sun.misc.Unsafe.operations provides a non-standard set of fence operations. JEP 193 defines a standard set of fence operations to enable fine-grain control of memory ordering. It also defines a standard reachability fence operation to ensure a referenced object remains strongly reachable.

JEP 254 provides a space-efficient internal representation for strings. Previously, the String class stored characters in a char array using two bytes for each character. The new representation of the String class is a byte array plus an encoding-flag field.

JEP 266 is an interoperable publish-subscribe framework. Updates have been made to the CompletableFuture API and other things with the goal of continually evolving the uses of concurrency and parallelism in applications.

JEP 269 is a collection of APIs that are static factory methods to produce collections of immutable instances. The APIs simplify the creation of instances. For example list.of and set.of can take up to 10 fixed arguments. Alternatively, vararg can be used for an arbitrary number of arguments that pertain to lists and sets. Map.of is for a small number of key-value pairs. It does not use vararg.

“It’s taken 20+ years for Java to have this by default which is insane. It’s taken way too long,” said Zeeto’s Alexander. “The fact that I have not one but two different libraries installed across every one of our applications just to generate static lists poorly is very strange to me. I shouldn’t have to use a third-party library to generate a list like that. So, they’re late to the party, but I like it.”

JEP 269 makes lists, sets and maps easier, so what’s not to like? Perhaps the fact it’s a set of APIs rather than a standard, built-in feature of the language.

Java 9 support
At the time of this writing, Eclipse has a beta version that can be added to an existing Eclipse Oxygen (4.7) install. The beta provides the ability add JRE and JDK as installed JRE. With it, developers can create Java and plugin projects that use a JRE or JDK 9. They can also compile modules that are part of a Java product. In addition, there is beta support for Java Standard Edition (SE) 9.

In a March blog post, IntelliJ announced that IntelliJ IDEA 2017.1 provides support for Java 9 modules including code completion, quick fixes and help. The blog includes a nice walkthrough of a “Hello World” example. It also notes that Java 9 modules must correspond to IntelliJ modules and that the dependencies for both Java 9 modules and IntelliJ modules need to be declared. In July, IntelliJ announced new improvements that aid developer productivity. One of them is the color-coded Java Module diagram. It enables developers to visualize modules and their dependencies.

Madrid is a firmly committed IntelliJ user because it enables him to be more productive than he would be otherwise. Like Zeeto’s Alexander, he intends to proceed cautiously with Java 9 to mitigate risks.

“Whatever new thing I might build would have to be low-risk. It can’t be a hardened, production, scalable system. I have to trust [Java 9] first,” said Madrid. “There are some principles I would want to follow to be able to observe and control the system. I would set up my acceptance tests, performance tests and I would measure the software and benchmark it against something like 8. If I don’t see improvements and even worse, if I see regressions or unexpected behaviors, I’m going to wait until those are addressed.”

The Apache Maven community has been running some experiments and experiencing some frustrations, which indicative of Java 9’s early days.

According to the Gradle blog, Gradle 3.0 provides initial support for Java 9’s latest Early Access Preview (EAP). Developers can also build and run tests using earlier versions of JDK 9. However, there is no support for modules or JDK 9 specific compile options.

Bottom line, it’s going to take time for JDK 9 to gain traction, but it will get there. Hopefully, the move to the modular architecture won’t be overly painful; however, it will require a lot of patience and hard work on developers’ parts, especially in the early days as things break and behave unexpectedly.

Tools will help ease the pain eventually, as they always do.