Programming For The Java¿ Virtual Machine by Joshua EngelProgramming For The Java¿ Virtual Machine by Joshua Engel

Programming For The Java¿ Virtual Machine

byJoshua Engel

Paperback | June 22, 1999

Pricing and Purchase Info

$46.99

Earn 235 plum® points

Prices and offers may vary in store

Out of stock online

Not available in stores

about

The nucleus of the Java programming language, the Java Virtual Machine (JVM) is the underlying technology responsible for Java''s most distinctive features -- its cross-platform delivery, the small size of its compiled code, and its security capabilities. Knowledge of JVM internals is a huge advantage for Java programmers. It allows them to understand how their own programs operate to achieve better performance. While other books offer an overview of the Java Virtual Machine or paraphrase the standards documentation, Engel breaks new ground with this book by actually showing how to write programs for the Java Virtual Machine. In addition, Engel explains how to write JVM programs directly, without the aid of a Java compiler. Security designers will learn how the JVM verification algorithm works, and will be better equipped to build their own secure Java systems. Language designers will be able to create languages that run on top of the JVM, thereby acquiring its portability and performance. This book is completely up-to-date, covering the many fundamental changes made to the newest incarnation of the JVM and is compatible with all versions of Java: 1.0, 1.1, and 1.2.
Joshua Engel is a programmer, computer scientist, and acknowledged expert in the Java virtual machine. He is Chief Software Developer for Knowledge Bus, Inc. (www.knowledgebus.com) During his extensive programming career, he has worked with dozens of programming languages and even designed a few of his own. 0201309726A...
Loading
Title:Programming For The Java¿ Virtual MachineFormat:PaperbackProduct dimensions:512 pages, 8.9 X 7 X 1 inShipping dimensions:512 pages, 8.9 X 7 X 1 inPublished:June 22, 1999Publisher:Pearson EducationLanguage:English

The following ISBNs are associated with this title:

ISBN - 10:0201309726

ISBN - 13:9780201309720

Appropriate for ages: All ages

Look for similar items by category:

From the Author

Every time you compile a Java program to produce a class file, you’ve written a program for the Java virtual machine. This book is designed to take you to the next level: writing Java virtual machine (JVM) programs directly, without the aid of a Java compiler. A number of people would want to do this: Advanced Java programmers Security experts Language designers and compiler writers Advanced Java programmers want to know how the JVM works, in detail. Learning the details of the JVM will help improve your understanding of what a Java program does. Some messages from the JVM will be clearer after you understand how the JVM looks at your program. This understanding can also help you improve the performance of your programs. Another reason for advanced Java programmers to learn JVM programming is that it will help you understand how JVM code moves. One of the most important uses of Java is to download applets from the Internet (or other sources). The JVM uses a class called ClassLoader to incorporate code from the Internet into the JVM. The ClassLoader has many other uses. The Java Foundation Classes use subclasses of ClassLoader to load new Look and Feel classes. Some databases use other subclasses of ClassLoader to incorporate queries written in Java directly into the database. Security experts already know that the Java language is designed with security features in mind. Java promises to allow users to download applets from the Internet without fear. However, these promises seem empty until you know precisely how the JVM keeps the promises Java makes. This book discusses in detail how the JVM verification algorithm works. Knowing the verification algorithm will give you greater confidence in the security of the JVM. This book will give you the tools you need to build your own secure systems on top of the JVM, by explaining both what promises the JVM makes (and how it keeps them) and what promises it doesn’t make. Language designers want to design new languages for the Java virtual machine. Although the Java language is excellent, perhaps the best generalpurpose programming language ever created, there are still times when a different language does the job better. Sometimes these are generalpurpose languages built into an application (like WordBasic in Microsoft Word or Emacs Lisp). Others are tiny, specialpurpose languages (like SQL, regular expressions, or filters in PhotoShop). This book describes compilers for two languages, Scheme and Prolog, which are very different from Java. These compilers generate JVM code and use a subclass of ClassLoader to load it into the system. By compiling into JVM code, these nonJava languages gain some of the "Write Once, Run Anywhere" properties of Java without losing the power of the original language. These compilers can be used as a starting point for compiling other languages. Other languages already implemented for the JVM include Tcl, ML, Eiffel, Python, and Ada. As more and more programs are written in Java, there is an increasing need to implement new languages. By implementing these languages using the JVM, you can get the portability and performance of the JVM. Prerequisites This book assumes that you have a good basic knowledge of Java. Many of the ideas in the book are explained in terms of Java; at the same time, the book tries to explain Java in terms of the JVM. Hopefully, this will reinforce your understanding of both the Java language and the Java virtual machine. If you’re new to Java, let me recommend The Java Programming Language, by Ken Arnold and James Gosling. It’s an excellent introduction to the language written in part by the originator of Java himself, James Gosling. Many sections have exercises. The exercises don’t introduce new material, but they do reinforce the existing lessons. Most of the exercises ask you to write small pieces of code. For some exercises, answers are provided at the back of the book. If you’re using this book for a class and you’ve been assigned the exercises as a homework problem, then turning in the answers at the back of the book is cheating! Fortunately, real JVM programmers are trustworthy. Books This book has been designed to stand on its own. You should be able to read it without owning any other books on Java. However, there are two books which you may find very useful. One is The Java Virtual Machine Specification (JVMS), by Frank Yellin and Tim Lindholm. It is the "truth" of the Java virtual machine. All JVM implementers, including Sun itself, are expected to adhere to the definition of the Java virtual machine contained in the JVMS. Wherever your JVM implementation disagrees with the JVMS, it is always the JVMS that is correct. I recommend that you have a copy on hand if you want to do a lot of JVM programming, because it is the final word on any JVMoriented question. Another book I recommend is The Java Language Specification, by James Gosling, Bill Joy, and Guy Steele. This is a large, thick tome that contains the absolute truth about the Java language. It does an excellent job of specifying all the details of what a Java program means. It is meticulously precise, but it can still be a lot of fun to read because it throws in many funny examples and quotes. Even just browsing the index can be a treat. (Look up the index entry for prime numbers to see what I mean.) Both of these books are available over the Internet at http://java.sun.com/docs. Paper copies are available at any bookstore. While you’re on the Internet, let me recommend one other source of information. The newsgroup comp.lang.java.machine is dedicated to discussing how the Java virtual machine works, how it is implemented, and so forth. I’m a frequent reader and contributor, and there are many other experts willing to share their copious knowledge. Acknowledgments I would like to thank Stefan Gower for giving me the original idea of implementing a Scheme compiler for the Java virtual machine. Christopher Cook, William Andersen, Brian Peterson, and Paul Brinkley were indispensable, allowing me to explain JVM concepts to them until I finally found a lucid explanation. Marina Lang at Addison Wesley Longman was instrumental in guiding me through the process of getting a book written. Thanks also to the many reviewers she found who helped me turn drafts into something readable. Finally, I would like to thank the regular posters to comp.lang.java.machine, the newsgroup for the JVM. They provided answers to a lot of questions and brought up questions I had not previously considered. 0201309726P04062001

Read from the Book

Every time you compile a Java program to produce a class file, you''ve written a program for the Java virtual machine. This book is designed to take you to the next level: writing Java virtual machine (JVM) programs directly, without the aid of a Java compiler. A number of people would want to do this: Advanced Java programmers Security experts Language designers and compiler writers Advanced Java programmers want to know how the JVM works, in detail. Learning the details of the JVM will help improve your understanding of what a Java program does. Some messages from the JVM will be clearer after you understand how the JVM looks at your program. This understanding can also help you improve the performance of your programs. Another reason for advanced Java programmers to learn JVM programming is that it will help you understand how JVM code moves. One of the most important uses of Java is to download applets from the Internet (or other sources). The JVM uses a class called ClassLoader to incorporate code from the Internet into the JVM. The ClassLoader has many other uses. The Java Foundation Classes use subclasses of ClassLoader to load new Look and Feel classes. Some databases use other subclasses of ClassLoader to incorporate queries written in Java directly into the database. Security experts already know that the Java language is designed with security features in mind. Java promises to allow users to download applets from the Internet without fear. However, these promises seem empty until you know precisely how the JVM keeps the promises Java makes. This book discusses in detail how the JVM verification algorithm works. Knowing the verification algorithm will give you greater confidence in the security of the JVM. This book will give you the tools you need to build your own secure systems on top of the JVM, by explaining both what promises the JVM makes (and how it keeps them) and what promises it doesn''t make. Language designers want to design new languages for the Java virtual machine. Although the Java language is excellent, perhaps the best general-purpose programming language ever created, there are still times when a different language does the job better. Sometimes these are general-purpose languages built into an application (like WordBasic in Microsoft Word or Emacs Lisp). Others are tiny, special-purpose languages (like SQL, regular expressions, or filters in PhotoShop). This book describes compilers for two languages, Scheme and Prolog, which are very different from Java. These compilers generate JVM code and use a subclass of ClassLoader to load it into the system. By compiling into JVM code, these non-Java languages gain some of the "Write Once, Run Anywhere" properties of Java without losing the power of the original language. These compilers can be used as a starting point for compiling other languages. Other languages already implemented for the JVM include Tcl, ML, Eiffel, Python, and Ada. As more and more programs are written in Java, there is an increasing need to implement new languages. By implementing these languages using the JVM, you can get the portability and performance of the JVM. Prerequisites This book assumes that you have a good basic knowledge of Java. Many of the ideas in the book are explained in terms of Java; at the same time, the book tries to explain Java in terms of the JVM. Hopefully, this will reinforce your understanding of both the Java language and the Java virtual machine. If you''re new to Java, let me recommend The Java Programming Language, by Ken Arnold and James Gosling. It''s an excellent introduction to the language written in part by the originator of Java himself, James Gosling. Many sections have exercises. The exercises don''t introduce new material, but they do reinforce the existing lessons. Most of the exercises ask you to write small pieces of code. For some exercises, answers are provided at the back of the book. If you''re using this book for a class and you''ve been assigned the exercises as a homework problem, then turning in the answers at the back of the book is cheating! Fortunately, real JVM programmers are trustworthy. Books This book has been designed to stand on its own. You should be able to read it without owning any other books on Java. However, there are two books which you may find very useful. One is The Java Virtual Machine Specification (JVMS), by Frank Yellin and Tim Lindholm. It is the "truth" of the Java virtual machine. All JVM implementers, including Sun itself, are expected to adhere to the definition of the Java virtual machine contained in the JVMS. Wherever your JVM implementation disagrees with the JVMS, it is always the JVMS that is correct. I recommend that you have a copy on hand if you want to do a lot of JVM programming, because it is the final word on any JVM-oriented question. Another book I recommend is The Java Language Specification, by James Gosling, Bill Joy, and Guy Steele. This is a large, thick tome that contains the absolute truth about the Java language. It does an excellent job of specifying all the details of what a Java program means. It is meticulously precise, but it can still be a lot of fun to read because it throws in many funny examples and quotes. Even just browsing the index can be a treat. (Look up the index entry for prime numbers to see what I mean.) Both of these books are available over the Internet at http://java.sun.com/docs. Paper copies are available at any bookstore. While you''re on the Internet, let me recommend one other source of information. The newsgroup comp.lang.java.machine is dedicated to discussing how the Java virtual machine works, how it is implemented, and so forth. I''m a frequent reader and contributor, and there are many other experts willing to share their copious knowledge. Acknowledgments I would like to thank Stefan Gower for giving me the original idea of implementing a Scheme compiler for the Java virtual machine. Christopher Cook, William Andersen, Brian Peterson, and Paul Brinkley were indispensable, allowing me to explain JVM concepts to them until I finally found a lucid explanation. Marina Lang at Addison Wesley Longman was instrumental in guiding me through the process of getting a book written. Thanks also to the many reviewers she found who helped me turn drafts into something readable. Finally, I would like to thank the regular posters to comp.lang.java.machine, the newsgroup for the JVM. They provided answers to a lot of questions and brought up questions I had not previously considered. 0201309726P04062001

Table of Contents



Preface.


1. Introduction to the Java Virtual Machine.

Java Virtual Machine and Java.

What Is the Java Virtual Machine?

Instruction Set.

class File Format.

Verification.

Java Platform.

Organization of the Java Virtual Machine.

Class Area.

Java Stack.

Heap.

Native Method Stacks.

Example.

Garbage Collection.

Finalization.

Timing of Garbage Collection.

JVM Implementations.

Versions of the Virtual Machine.

Future of the Java Virtual Machine.



2. Oolong.

Hello, World.

.class and .super Directives.

main Method.

Instructions.

Structure of an Oolong Program.

Defining the Class.

Superclasses.

Declaring Fields.

Declaring Methods.

Interfaces.



3. Writing Methods.

Some Definitions.

Types.

Numeric Types.

Object Types.

Type returnAddress.

Mnemonic Naming Conventions.

Testing Code Examples.

Returns.

Constants.

General Constants.

Small Constants and null.

Local Variables.

Initializing Variables.

Local Variables as Method Arguments.

Math.

Arithmetic Operations.

Nonnumbers and Infinity.

Bitwise Operations.

Floating-Point Arithmetic and strictfp.

Type Conversions.

Conversion Example.

Widening and Narrowing.

Stack Manipulations.

Arrays of Numbers.

Just Biding Your Time.



4. Classes and Objects.

What Is an Object?

Objects and References.

Class Names.

Packages.



Creating Objects.


Constructors.


Using Fields.

Types and getfield.

Inheriting Fields.

Changing Field Values.

Invoking Methods on Objects.

Virtual Invocation.

Method Inheritance and Overriding.

Overloading and Method Matching.

Invoking a Method Directly.

invokespecial and super.

Casting.

Casting, Fields, Methods, and Java.

Returning Objects.

Interfaces.

Static Fields and Methods.

Class Initialization.

Arrays.

Arrays of Reference.

Multidimensional Arrays.

Length of Arrays.



5. Control Instructions.

Comparing Integers.

Comparing References.

Other Comparisons.

Switches.

Subroutines.

Exceptions.

Multiple Exception Handlers.

.throws Directive.

Other Ways to Throw Exceptions.

A Gentler Way of Checking Type.



6. Verification Process.

How the Verification Algorithm Works.

Is It a Structurally Valid class File?

Are All Constant References Correct?

Will Each Instruction Always Find a Correctly Formed Stack and Local Variable Array?

Example 1: Hello, World.

Example 2: gotos and ifs.

Example 3: Code That Doesn’t Verify.

Example 4: Dealing with Subclasses.

Algorithm.

Do External References Check Out?

Java Language and Verification Algorithm.

Fooling the Virtual Machine with a Java Compiler.

Other Languages and the Verification Algorithm.

Other Safety Requirements.

Checking Verification.



7. Debugging.

Debugging Directives in Oolong.

.source Directive and .line Directives.

.var Directive.

Debugging Oolong Programs.

Runtime Tracing.



8. Class Loaders.

How Classes Are Loaded.

Loading.

Linking.

Loading Classes without a Class Loader.

Making Your Own Class Loader.

Caching Classes.

Examples.

Working with Class Objects.

Reflection.



9. Inside a Java class File.

class File Header.

Constant Pool.

UTF8 Entries.

Constant Entries.

Field, Method, and Class Entries.

Class Information.

Fields and Methods.

Class Attributes.

Other Attributes.

ConstantValue Attribute.

Exceptions Attribute.

InnerClasses Attribute.



10. Compiling Java.

Expressions and Statements.

Expression Types.

Numeric Types.

Object Types.

Expression Result Types.

Compile-Time Types and Type Restrictions.

Type Safety and Verifiability.

Compiling Statements and Expressions.

Local Variable Declarations.

Fields and Variables.

Abbreviations.

Other Assignments.

Assignments as Expressions.

Type-Checking in Assignments.

Creating New Objects.

Class Name Abbreviations.

Arithmetic Expressions.

Numeric Coercions.

Casting Numeric Values.

Operator.

Method Calls.

Virtual Method Calls.

Static Method Calls.

Example of Method Calls.

Overriding.

Overloading.

Interfaces.

Expressions as Statements.

Ifs and Booleans.

Boolean Values.

if Statements.

Comparisons.

Floating-Point Comparisons and NaN.

Integer Comparisons.

References and Object Equality.

Boolean Operators.

Other Control Structures.

Loops.

Compiling Control Constructs.

Compound Statements and Verification.

Returns.

Field Declarations.

Method Declarations.

Constructors.

Using Other Constructors in the Same Class.

Default Constructors.

Field Initializers and the Constructor.

Conclusion.



11. Compiling Other Languages.

Java Version 1.1.

Class Literals.

Inner Classes.

Variable Scoping with Inner Classes.

Regular Expressions.

Iterators.

Iterators in Sather.

Implementing Iterators.

Iterators with Arguments.

Using Iterators.

Parameterized Types.

Implementing Parameterized Types with a Generic Class.

Implementing Parameterized Types as Templates.

Multiple Inheritance.

Interfaces for Multiple Inheritance.

Implementing the Interfaces.

Fields.

Conclusion.



12. Implementing Scheme.

Scheme Concepts.

Compiling Scheme into Bytecodes.

Compiling Lambda Expressions.

Example.

Scheme Library.

Optimizing Scheme.

Static Scoping.

Using Local Variables.

Inlining.

Tail Recursion.

Using Type Information.



13. Implementing Prolog.

Introduction to Prolog.

Asking Questions.

Binding Patterns.

Implications.

Binding Patterns and Implications.

Facts as Rules.

More About Unification.

Implementation Basics.

Unification.

Unification Algorithm.

Managing Bindings.

Rules as Programs.

inside.

within.

yield and Backtracking.

Implementing Rules.

Implementing within.

Implementing Conjunctions.

Constructing within.

Compiling Facts.

Case Study.



14. Performance.

Fast Virtual Machines.

Garbage Collection Performance.

Implementing References.

Bytecode Optimization Techniques.

Warning.

Constant Propagation.

Strength Reduction.

Loop Unrolling.

Peephole Optimization.

Inlining.

Inlining Fields.

Separate Compilation.



15. Security and the Virtual Machine.

Java platform and Need for Security.

Security Promises of the JVM.

Security Architecture and Security Policy.

Example.

Basic Applet Security Policy.

More Sophisticated Policies.

Some Potential Attacks.

Implementation Details.

Protecting the Security Manager.

Bypassing Java Security.

Using Unconstructed Objects.

Invalid Casts.

Changing the Class of a Reference.

Reading Uninitialized Fields.

Array Bounds Checks.

Catching Exceptions.

Hidden Code.

Conclusion.



16. Threads and Synchronization.

Threads.

Example: Multithreaded Web Server.

Exceptions and Threads.

Sharing State Between Threads.

Need for Synchronization.

Exception: longs and doubles.

Monitors and Object Locks.

Synchronization in Java.

Synchronized Methods.

Scheduling.

Surrendering Control of the CPU.

Waiting for Another Thread.



Conclusion.


A. Tables.

Instructions by Opcode.

Instructions Alphabetically.

Instructions by Category.

Arithmetic.

Array.

Constant.

Control.

Data Type Conversion.

Object.

Stack Manipulation.

Synchronization.

Variable.



B. Oolong Reference.

Using the Oolong Assembler.

Gnoloo.

DumpClass.

Oolong Language.

Comments.

source.

class.

interface.

end class.

super.

implements.

field.

method.

limit locals.

limit stack.

line.

var.

throws.

catch.

end method.

Instructions.

Instructions with No Arguments.

Integers.

Labels.

Classes.

Fields and Methods.

invokeinterface.

multianewarray.

ldc, ldc_w, and ldc2_w.

newarray.

tableswitch.

lookupswitch.



C. Answers to Selected Exercises.


Further Readings.


Java and the JVM.


Newsgroup.


Other Languages.


Compilers.


Index. 0201309726T04062001

From Our Editors

The Java language is the most popular in computer technology. In Programming for the Java Virtual Machine, Joshua Engel shows readers how to write faster running and more secure programs using Java applications. Readers will learn how to write programs for this machine, programming techniques and information on the latest changes in Java applications. This book is a must-read and will be a useful reference guide for advanced Java programmers, security experts and language designers that want to increase their Java knowledge.