YOUR FEEDBACK
E-Commerce 2.0
Brian wrote: I think we're heading in the right direction, but we've still...


2007 West
GOLD SPONSORS:
Active Endpoints
Your SOA Needs BPEL for Orchestration
BEA
Virtualized SOA: Adaptive Infrastructure for Demanding Applications
Nexaweb
Overcoming Bandwidth Challenges with Nexaweb
TIBCO
What is Service Virtualization?
SILVER SPONSORS:
WSO2
Using Web Services Technologies and FOSS Solutions
Click For 2007 East
Event Webcasts

2008 East
PLATINUM SPONSORS:
Appcelerator
Think Fast: Accelerate AJAX Development with Appcelerator
GOLD SPONSORS:
DreamFace Interactive
The Ultimate Framework for Creating Personalized Web 2.0 Mashups
ICEsoft
AJAX and Social Computing for the Enterprise
Kaazing
Enterprise Comet: Real–Time, Real–Time, or Real–Time Web 2.0?
Nexaweb
Now Playing: Desktop Apps in the Browser!
Sun
jMaki as an AJAX Mashup Framework
POWER PANELS:
The Business Value
of RIAs
What Lies Beyond AJAX?
KEYNOTES:
Douglas Crockford
Can We Fix the Web?
Anthony Franco
2008: The Year of the RIA
Click For 2007 Event Webcasts
SYS-CON.TV
TOP THREE LINKS YOU MUST CLICK ON


We Are Made to Persist. That's How We Find Out Who We Are

Digg This!

In Java's early years, the language received a lot of flak from its opponents over performance. Java turns its .class file bytecodes into machine instructions (MI) at runtime, something that costs cycles and is slower than a fully compiled language that creates the MI as part of the development stage. While to a certain extent this is true, the performance delta has all but been removed with the use of just-in-time (JIT) compilers that cache machine instructions in the VM and do other clever tricks to ensure the JVM runtime speed has very little slack. There was a time when JIT had to be switched off for debugging as it interfered with the ability to map stack and heap information back to the original source. However, even this is no longer true in the newer JVMs that can run in high-performance debug modes with no significant difference between having -Xdebug there or not.

The garbage collector is another area that the Java language has received criticism for. The original concept is that programmers don't have to worry about freeing memory, all they do is create objects at will and let the JVM determine when an object is no longer required. It is certainly a lot simpler than de-allocating heap memory manually in a C program; however, because it's based on presumptive algorithms, frequently it's unfairly blamed for JVM memory bloat or performance problems. Modern garbage collectors though are very efficient and can reclaim memory in small segments with incremental pauses to let the JVM continue uninterrupted (www.research.ibm.com/metronome/). They also defragment memory as they go along, and JSR 1 introduces new APIs that allow fully deterministic garbage collection and high-resolution time management, although they do introduce the problem of how to manage immortal memory.

When a Java program is launched, the java command contains the -classpath that points to a set of directories containing .class files and other resources required by the main class. The VM loads classes on-demand when they are first referenced by searching the directories (or .jars if they are zipped up) and loading bytecodes before compiling them. In a textbook "Hello World" program considerably more time is spent loading the JRE classes required for the user's code to run than is spent loading the main class. As the base classes are loaded, they need memory allocated for them; they need just-in-time compilation into machine instructions, and other steps such as bytecode verification and linkage all take JVM cycles to perform. Once the JVM is up and running it can rerun the scenario quickly because the bootstrap work has been done and the VM is fully warmed up. When the user exits the JVM, however, all of the work is thrown away. The next time they rerun the same Java program, all the steps required to load the base JRE classes, allocate memory for them, and so forth takes place de novo. Developers of server-side JVMs like Shiraz (www.haifa.il.ibm.com/projects/systems/rs/persistent.html) that run on z/OS solve this by allowing the sharing of classes between JVMs, providing good scalability. Apple's JVMs use a flavor of class-sharing known as Java Shared Archive (JSA) while Java 5 introduced formal Class Data Sharing that allows the sharing of base classes between VMs and, in the future, user-defined classes.

All of this is great news for Java: it has high-performance JITs that can work in debug conditions, garbage collectors that don't freeze the JVM each time a global sweep of the heap has to be done to determine unreferenced objects, and the sharing of data between JVMs to assist scalability. There's one area left though that I'd like to see tackled - serialization and rehydration of a JVM's state. The advantage would be that a program could be exited and re-started on subsequent re-opens as though it had just been temporarily paused. There are problems though that any such solution would encounter.

One is that the Java runtime used by the JVM when the it's re-opened might be different than the one when it was saved. In this case, the classes might have changed physical shape, with instance variables added, removed, renamed, or any number of changes that mean that the serialized instances from the first save can't be mapped to the new class shape. Binary serialization is very brittle and unforgiving when any kind of class shape change occurs. What would be nice is if there was a programmatic way to mutate instances to a new class shape. If the author of a class changes its shape, there could be a method called by the JVM that allowed them to deserialize old shaped instances and map them into new objects.

The second problem is that some objects hold handles to pointers outside the JVM that won't necessarily exist next time round. These could be references to files, sockets, GUI widgets, or anything where the object interacts with the platform in some way. This could be solved by having a clearly defined life cycle to the VM whereby objects were called back on save and load, and something like a GUI widget could keep all of its data on save except the actual window handle, and then re-create itself again from this state when the VM is reloaded. There would still be problems about what to do with something that might not be there any more, such as a file on disk that was no longer present, but if the VM had a clearly defined API cycle through which objects were saved and restored that class authors adhered to, this could be dealt with.

Java has matured in its release cycle since the early days and new versions occur in 18-month rather than weekly periods. For every Java program that runs again and again all year with the same set of unchanged classes, we need to think about how to optimize it for the common scenario: nothing in the JRE has changed, it's on the same computer that ran last time round, and the user wants it to come up as fast as any native program. I think the whole area of VM object persistence needs to be looked at again and seen whether this time around it can be made to work, benefiting programmers with more control and flexibility and users with faster and more reliable programs.

About Joe Winchester
Joe Winchester, JDJ's Desktop Technologies Editor, is a software developer working on development tools for IBM in Hursley, UK.

LATEST JAVA STORIES & POSTS
Case Study: Java and the Mac
This is the story of a Mac application developer (okay - it's about two of them) who set out on a quest to find an application development tool based on Java so his boss would let him develop on the Mac platform, which he loved. There was only one catch - he had to find a tool th
A Lightweight Approach to SOA and BPM in Java Using jBPM
SOA is mostly associated with technologies such as BPEL, SCA and Web Services. But does SOA really imply these technologies? In this session we will show how you can use the service oriented approach while staying inside the Java world. jBPM is a powerful lightweight framework th
JavaOne 2008: Uncommon Java Bugs
Any large Java source base can have insidious and subtle bugs. Every experienced Java programmer knows that finding and fixing these bugs can be difficult and costly. Fortunately, there are a large number of free open source Java tools available that can be used to find and fix d
The 4 Core Principles of Agile Programming
One of the things I really enjoy at the moment is the recognition and adoption of agile programming as a fully fledged powerful way to deliver quality software projects. As its figurehead is a group of very talented individuals who have created the agile manifesto (http://agilema
JavaOne 2008: Sun Adds Comprehensive Video Capabilities to JavaFX
Sun Microsystems announced it has entered into a multi-year agreement with On2 Technologies to add comprehensive video capabilities, using On2 Technologies TrueMotion video codecs, to Sun's JavaFX, a family of products for creating Rich Internet Applications (RIAs) with immersive
JavaOne Archives - Dvorak Comments on AMD Intel Lawsuit on SYS-CON.TV
Conference in San Francisco. Dvorak held forth on a number of topics, including the new AMD/Intel lawsuit, the viability of Java and Sun, the value of (or lack thereof) of corporate PR, and whether or not a new book about Silicon Valley is really worth reading.
SUBSCRIBE TO THE WORLD'S MOST POWERFUL NEWSLETTERS
SUBSCRIBE TO OUR RSS FEEDS & GET YOUR SYS-CON NEWS LIVE!
Click to Add our RSS Feeds to the Service of Your Choice:
Google Reader or Homepage Add to My Yahoo! Subscribe with Bloglines Subscribe in NewsGator Online
myFeedster Add to My AOL Subscribe in Rojo Add 'Hugg' to Newsburst from CNET News.com Kinja Digest View Additional SYS-CON Feeds
Publish Your Article! Please send it to editorial(at)sys-con.com!

Advertise on this site! Contact advertising(at)sys-con.com! 201 802-3021

SYS-CON FEATURED WHITEPAPERS

ADS BY GOOGLE
BREAKING JAVA NEWS
KongZhong Corporation Reports Unaudited First Quarter 2008 Financial Results
KongZhong Corporation , a leading wireless value-added services (WVAS) and wireless media co