Looking for Java resources? Check out the Java
Coffee Break directory!
Bill Venners has been writing software professionally for 14 years.
Based in Silicon Valley, he provides software consulting and training services through
Artima Software, Inc. His popular columns in JavaWorld
magazine have covered Java internals, object-oriented design techniques,
and Jini technology. Bill is also the author of Inside the Java 2 Virtual Machine,
an authoritative guide to the internal architecture of Java. In this
exclusive interview, he talks to us about the inner workings of Java,
and the future of the Java platform.
Q: What do you see has been the biggest change affecting the Java community in the last year?
A: Currently most of the Java programming activity seems to be taking place
on the server side. Servlets are a big hit, for example. At the second Jini Community meeting last fall, Ted Schlein, venture capitalist with
the Java Fund, said that Java was now accepted as viable for the
enterprise. That Java was no longer considered a risky leading-edge
technology. So I think Java's acceptance in the enterprise and on the
server side is important.
I myself have been very involved this past year in Jini and the Jini
Community. This particular technology hasn't yet made much of a dent in the marketplace, but I think it is the one to watch.
Q: What do you see as the main advantages of Java, compared to other languages
A: Allow me to quote Chapter 1 of my book:
At the beginning of a new project, you may be faced with the question,
"Should I use C++ (or some other language) for my next project, or
should I use Java?" As an implementation language, Java has some
advantages and some disadvantages over other languages. One of the most
compelling reasons for using Java as a language is that it can enhance developer productivity. The main disadvantage is potentially slower
Java is, first and foremost, an object-oriented language. One promise of
object-orientation is that it promotes the re-use of code, resulting in
better productivity for developers. This may make Java more attractive
than a procedural language such as C, but doesn't add much value to Java
over C++. Yet compared to C++, Java has some significant differences that can improve a developer's productivity. This productivity boost
comes mostly from Java's restrictions on direct memory manipulation.
The productivity boost you can get just by using the Java language
results in quicker development cycles and lower development costs. You can realize further cost savings if you take advantage of the potential
platform independence of Java programs. Even if you are not concerned about a network, you may still want to deliver a program on multiple
platforms. Java can make support for multiple platforms easier, and therefore, cheaper.
For those interested in a more detailed explanation,
the full comparison of Java and C++, reprinted from Chapter 1, is
Q: How does gaining a better understanding of the architectural design of JVM's benefit developers?
A: My book doesn't simply describe the architecture of JVMs, but the
architecture of Java itself. What my book allows developers to do is
gain an in-depth understanding of this programming tool called Java.
When you get deep into Java programming, such an in-depth understanding is very useful. For example,
if you are doing anything with RMI, you very quickly discover that you need to understand the parent-delegation
model of class loaders. Chapter 8 of my book explains Java's linking model, including how class loaders work. If you are writing serious
multi-threaded programs, you need to understand the Java monitor. Chapter 20 of my book explains how Java's threading model works in the
JVM, including an explanation of the Java monitor.
I think that one of the main points of my book is to explain why Java is
here. Someone recently told me in an email, "From my [the emailer's]
point of view Java is just a language. Java is certainly not revolutionary, despite Sun's claims." My book is an attempt to show that
Java is not "just a language."
The Java Programming Language is "just a language." It is a nice
language, but I consider languages to be tools in a toolbox. I use the
most appropriate tool for the job. I use Java quite a bit, but I also
use Perl, Python, C, Lex, Yacc, HTML, XML, and so on. When Java first appeared on the scene in 1985, I do think it was a revolutionary
technology, but it wasn't the language that was revolutionary. The Java
language is nice, but other languages have their good qualities too.
What was revolutionary about Java was the not the language but the Java Platform, because the platform enables the network mobility of code and
When I sat down to write Inside the Java Virtual Machine, I didn't want
to write a book about the language. I wanted to write a book about the
platform. My book explains that Java's architecture was designed for the
purpose of enabling code and objects to fly across networks, and shows in detail how the architecture, in particular the Java virtual machine,
accomplishes that feat. I think understanding the motivation behind Java's architecture is useful to any developer who wants to keep abreast
of what is going on in our industry. For an overview of how Java's architecture enables network mobility of code and objects, and what that
implications of network mobility are for software development, I'd recommend reading Chapter 4, which is
Q: Security is an important issue for enterprises deploying Java applications.
What's you're opinion of the Java security architecture, and does it offer
greater security than other languages?
Security is really part of the Java platform, not the language. Java's
security model is one of the main ways the Java platform enables network
mobility of code and objects -- and Java security model is very unique. I don't know of any other programming technology that has this kind of
security model. The main way the security model makes its way into the Java language is the restrictions on memory access, in particular Java's
iron-clad guarantee of type safety.
The security model has evolved quite a bit from JDK 1.0. In 1.2, the
security model is very powerful and flexible, though somewhat complex.
Chapter 3 of my book, which gives a detailed introduction to Java's
security model, is available online
Q: Looking to the future, where do you see Java heading? Is there a
particularly dominant technology (e.g. J2EE, CORBA, Jini) that you feel will change the way we look at Java?
I am currently working heavily with Jini, because Jini is leverages the
network mobility offered by Java's architecture in a very ingenious way.
I've heard Mark Andreeson (of Netscape fame) quoted as saying, "Client-side Java is dead." He was talking about applets, and he was
about right in that respect. I
believe Jini promises to resurrect client-side Java, and I've been working with Jini with that goal in mind.
I also have much more information (articles, FAQ, links to resources,
etc.) about Jini at the Jini
Corner, part of Artima.com.
Q: Well Bill, that was a very interesting and
informative look at the Java platform. For readers that want to know
more, Bill's book is called "Inside the Java Virtual Machine"
(just recently published as a second edition), and more material is
available at his website, Artima.com.