JVM Loading,Linking 和 Initializing 之 VM Startup 和 Creation and Loading
来源:互联网 发布:军用地图软件 编辑:程序博客网 时间:2024/06/06 09:09
JVM 通过创建一个初始的类来启动,这个类不依赖实现,使用bootstrap class loader(启动加载器)来加载。然后,JVM link 初始类,initialize 它并且调用它的 main 方法。对这个main 方法的调用引起其他方法的执行。JVM 指令的执行由main 方法组成可能引起 linking 附加的类和接口以及附加的方法的调用。
在一些JVM的实现中,初始的类可以由命令行参数提供。同样,初始的类也可以由实现提供。在初始化类可能准备了一个加载器,这个加载器反过来加载一个应用。只要初始类符合细则的规定,你也可以选择其他的初始类。
根据标记为N的类或接口C的创建过程由有接口C的内部实现的JVM 的方法区域的构建组成。通过运行期的常量池引用C的类或接口D触发了C的创建。类或接口也可能通过D调用JAVA 类库中的方法来创建,比如反射。
如果C 是非数组类,它通过加载一个C的二进制表示来创建。数组类没有外部的二进制表示;他们是被JVM创建而不是类加载器。
类加载器分为两种类型:用户定义的类加载器和由JVM 提供的启动加载器。每一个类加载器是抽象类ClassLoader 的子类的实例。应用为了继承JVM动态加载和创建类而应用类加载器。用户定义的类加载器可以被用作创建用户定义源的类。比如:一个类可以从网络下载,从空中创建,或者从加密的文件中提取。
类的加载器L 可能通过直接定义或通过另一个类加载器的代理来创建C。如果L直接创建C,我们可以说L 定义了C,或者,L是C的定义加载器。
当一个类的加载器通过另一个类加载器的代理,那么这个初始化Loading 的加载器不一定是完成 Loading 和 定义类的加载器。如果L创建了C,可能通过直接定义或代理,我们可以说L 初始化C的loading ,或者L是C的初始化加载器。
在运行期间,一个类或接口并不是单单由它的名字决定,而是由它的完全限定名和它的定义类加载器决定的。每一个这样的类或接口属于单一的一个运行包。一个类或接口的运行包由包的名字和类或接口的定义加载器决定。
JVM 使用以下三个过程中的一个来创建标记为N的类或接口C:
1. 如果N是一个非数组类或一个接口,以下两个方法中的一个将被用做load 和创建C:
a) 如果D 是由启动类加载器定义的,那么启动类初始化C的loading。
b) 如果D是由用户定义的类加载器定义的,那么同样的用户定义的类加载器初始化C的loading。
2. 否则,如果N是一个数组类。数组类直接由JVM创建,而不是类的加载器。然而,D的定义类的加载器在创建数组类C的过程中使用。
我们有时候使用定义<N,Ld>代表一个类或接口,其中N代表类或接口的名字,Ld代表类或接口的定义加载器。我们也用定义 Nli代表一个类或接口其中N代表类或接口的名字,LI代表类和接口的一个初始加载器。
- JVM Loading,Linking 和 Initializing 之 VM Startup 和 Creation and Loading
- Loading, Linking, and Initializing
- JVMS Specification(4)-Loading, Linking,and Initializing
- java类的装载(Loading)、链接(Linking)和初始化(Initialization)
- java类的装载(Loading)、链接(Linking)和初始化(Initialization)
- Creation, dynamic loading and instrumentation with javaagents
- GLSL TUTORIAL1 Loading, Compiling and Linking OGLSL Programs
- An Application Program Dynamically Loading and Linking the Shared Library
- Native Client - Development Cycle - Dynamic Linking and Loading with glibc
- 工具接口标准(TIS)可执行链接格式(ELF)规范-卷I-程序加载和动态链接(Program Loading and Dynamic Linking)
- 动态装入(Dynamic loading) 和动态链接 (dynamic linking)的区别是什么?
- 转 java类的装载(Loading)、链接(Linking)和初始化(Initialization)
- Android_水瓶loading和圆环loading
- EF学习和使用(五)Lazy Loading and Eager Loading
- 4-3 读取和保存(Loading and Saving)
- (转)4.3加载和保存(Loading and Saving)
- (转)4.3加载和保存(Loading and Saving)
- loading加载和layer.js
- 终端乱码的解决
- 最权威的Google排名算法解密
- 【转】详解C语言中的main() 参数
- What is SCRUM?
- jTemplate的用法
- JVM Loading,Linking 和 Initializing 之 VM Startup 和 Creation and Loading
- c#实现魔兽(warIII)中显血和改键功能 (附源码)(不影响聊天打字)
- centos 更新 yum的使用方法
- jqueryAPI学习笔记
- 本周目标--用python实现系统监控测试
- 写入和读取文本文件的简单应用
- java.lang.OutOfMemoryError: Java heap space读取文件时出现这个异常
- flex模板下载网站收集
- kruscal最小生成树算法