1. The authors of Java have published a shorter summary that is organized along the following 11 buzzwords:
Simple, Object-Oriented, Network-Savvy, Robust, Secure, Architecture-Neutral, Portable, Interpreted, High-Performance, Multithreaded, Dynamic
2. The syntax for Java is a cleaned-up version of the syntax for C++ and the size of the basic interpreter and class support is small.
3. Java has a pointer model that eliminates the possibility of overwriting memory and corrupting data.
4. Java was designed to make certain kinds of attacks impossible, among them:
a) Overrunning the runtime stack—a common attack of worms and viruses
b) Corrupting memory outside its own process space
c) Reading or writing files without permission
5. The Java compiler generates bytecode instructions which have nothing to do with a particular computer architecture. Rather, they are designed to be both easy to interpret on any machine and easily translated into native machine code on the fly.
6. Virtual machines have the option of translating the most frequently executed bytecode sequences into machine code—a process called just-in-time (JIT) compilation.
7. There are no “implementation-dependent” aspects of the specification. The sizes of the primitive data types are specified, as is the behavior of arithmetic on them.
8. Java delivered a simple toolkit that provided common user interface elements on a number of platforms.
9. The just-in-time compilers have become so good that they are competitive with traditional compilers and, in some cases, even outperform them because they have more information available. For example, a just-in-time compiler can monitor which code is executed frequently and optimize just that code for speed. A more sophisticated optimization is the elimination (or “inlining”) of function calls. The just-in-time compiler knows which classes have been loaded. It can use inlining when, based upon the currently loaded collection of classes, a particular function is never overridden, and it can undo that optimization later if necessary.
10. On the downside, thread implementations on the major platforms differ widely, and Java makes no effort to be platform independent in this regard. Only the code for calling multithreading remains the same across machines; Java offloads the implementation of multithreading to the underlying operating system or a thread library.