分类: Java
2010-07-14 20:02:28
Hist:
1007014, draft
This chapter specifies activities that occur during execution of a program. It is organized around the life cycle of a JVM and of the classes, interfaces, and objects that from a program.
Virtual Machine Start-Up
A JVM starts execution by invoking the method main of some specified class. Let’s suppose the class Test
Load the Class Test
The initial attempt to execute the method main of class Test discovers that the class Test is not loaded. The VM then uses a class loader to attempt to find such a binary representation.
Link Test: Verify, Prepare, (Optionally)Resolve
After loaded and before initialized, Test, like all (class or interface) types, must be linked. Linking involves verification, preparation and (optionally) resolution.
Verification checks that the loaded representation of Test is well-formed with a proper symbol table.
Preparation involves allocation of static storage and any data structures that are used internally by the vm, such as method tables.
Resolution is the process of checking symbolic references from Test to other classes and interfaces.
Initialize Test: Execute Initializers
Initialization consists of execution of any class variable initializers and static initializers of the class Test, in textual order.
Initialization may cause loading, linking, and initialization errors, including errors involving other type.
Invoke Test.main
Loading of Classes and Interfaces
Loading refers to the process of finding the binary form of a class or interface type with a particular name, and constructing a Class object to represent the class or interface.
The Loading Process
The loading process is implemented by the class ClassLoader and its sublcasses.
Linking of Classes and Interfaces
Linking is the process of taking a binary form of a class or interface type and combining it into the runtime state of the JVM, so that it can be executed.
Verification of the Binary Representation
Verification ensures that the binary representation of a class or interface is structurally correct.
Preparation of a Class or Interface Type
Preparation involves creating the static fields for a class or interface and initializing such fields to the default values.
Resolution of Symbolic References
Before a symbolic reference can be used it must undergo resolution, wherein a symbolic reference is checked to be correct and, typically, replaced with a direct reference that can be more efficiently processed if the reference is used repeatedly.
Initialization of Classes and Interfaces
Initialization of a class consists of executing its static initializers and the initializers for static fields delcared in the class. Initialization of an interface consists of executing the initializers for fields(constants) declared there.
Creation of New Class Instances
A new class instance is explicitly created when evalution of a class instance creation expression causes a class to be instantiated. A new class instance may be implicitly created.
Finalization of Class Instance.
The class Object has a protected method called finalize. This method can be overridden by other classes. The particular definition of finalize that can be invoke for an object is called the finalizer of that object. Before the storage for an object is reclaimed by the garbage collector, the JVM will invoke the finalizer of taht object.
Finalizers provide a chance to free up resources that cannot be freed automatically by an automatic storage manager.
Unloading of Classes and Interfaces
An implementation of the Java programming language may unload classes. A class or interface may be unloaded if and only if its defining class loader may be reclaimed by the garbage collector. Classes and interfaces loaded by the bootstrap loader may not be unloaded.
Program Exit
A program terminates all its activity and exits when one of two things happens:
1) All the threads that are not daemon threads terminate.
2) Some thread invokes the exit method of class Runtime or class System and the exit operation is not forbidden by the security manager.
REF
1. JLS 3nd