The Internet of things is rapidly changing the embedded space. Technology advances lead to faster processors that consume less power than ever and low-cost memory has exploded with the advent of mp3 players, iPods, and more capable handsets. The notion of what is embedded is evolving as well. An embedded device used to have a small range of functions and be dedicated to one or two special purposes. Today, boards with the capabilities of high-end PCs are being embedded into a wide range of infrastructures as we move into a world of networked "intelligent" devices.
This is generally good news for embedded developers. On the one hand, these improved capabilities mean greater choice for a development platform. After years of struggling to fit ever-more-complex code into slow and extremely small spaces, you can start reusing code from the broader software community and reduce your time to market and cost of development. But this also means that you're likely trying to figure out how much of your legacy solution you can bring forward, how hard it will be to upgrade development skills, and whether you need to make some architectural decisions to help you better take advantage of more mainstream software and tools. This is where Java can help.
The Java Advantage
You may be familiar with Java ME, the standard form of Java that has been used for the last several years in cellphones and other traditionally embedded spaces like printers, and switches. However, given the changing marketplace, Oracle has made Java Standard Edition (SE), the world's most robust and best performing form of Java, available for licensing on embedded systems. Java SE is quickly showing up in many embedded systems including intelligent routers and switches, high-end printers, military defense systems, and RFID readers. There's a reason for this - Java enables developers to be more productive . Here's how:
Familiar But Easier: Java has a familiar object model based on C++ but simplifies it and removes error-prone elements such as pointers and memory management. This allows traditional C and C++ programmers to quickly develop reliable solutions without having to track down memory leaks and segmentation fault errors.
Robust, Secure Environment: Java SE comes complete with a rich set of functionality for developers including networking, security, graphics, database, and XML support. Java SE was designed around security and connectivity. it's easy to develop connections with other applications, other systems, the Internet, and databases. Plus, Java's inherent memory model ensures that rogue programs or functions don't bring down the environment.
Portable and High Performance: Java provides a Write-Once-Run-Anywhere (WORA) environment which is very useful for the embedded space. Java SE allows you to develop and test on your x86 box, for example, then deploy on PowerPC. And your solution won't be slow. Our award-winning HotSpot technology inside Java SE uses machine code in-lining and just-in-time compilation to put Java applications performance on par with C or C++.
Widespread Community Support: This is probably the biggest difference you'll notice when moving to Java. There is an entire ecosystem of Java tools, code and applications many of which are open source and/or freely available. These tools and programs, supplemented by a wide range of Java books and training, help reduce the time and cost to design, develop and deploy Java programs, and ensure you'll have a solid base of trained developers available for you as you grow.