Java虚拟机和Java程序的生命周期?

### Java虚拟机与Java程序的生命周期 #### 一、Java虚拟机(JVM)概述 Java虚拟机(JVM)是一种可以执行Java字节码的虚拟机。它为Java应用程序提供了一个独立于硬件平台的运行环境,使得Java程序可以在任何安装了JVM的操作系统上运行而无需重新编译。JVM的主要组成部分包括类加载器、运行时数据区、执行引擎等。 #### 二、Java类的加载机制 Java类的加载过程是由类加载器(Class Loader)完成的。类加载器负责将Java类加载到内存中,并对类进行验证、解析以及初始化等操作。 - **类加载器分类**: - **启动类加载器(Bootstrap ClassLoader)**:它是所有类加载器的父类,用于加载Java的核心库(如java.lang.*包下的类),这些类通常位于`JAVA_HOME/jre/lib/rt.jar`中。 - **扩展类加载器(Extension ClassLoader)**:这个类加载器继承自启动类加载器,用于加载扩展库中的类,这些类通常位于`JAVA_HOME/jre/lib/ext`目录下。 - **系统类加载器(System ClassLoader)**:也称为应用类加载器,是最常见的类加载器,用于加载用户自定义的应用程序类,这些类通常位于类路径(classpath)中。 - **用户自定义类加载器**:用户可以通过继承`java.lang.ClassLoader`类并重写其中的方法来自定义类的加载方式。这种方式可以实现更灵活的类加载逻辑,比如支持动态加载、热更新等功能。 #### 三、类的加载过程 类的加载过程主要包括以下几个阶段: 1. **加载(Loading)**:类加载器通过特定的途径(如文件系统、网络等)找到类的二进制形式,并将其转化为字节流,再将这些字节流转化为Class对象。 2. **验证(Verification)**:确保输入的Class文件符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。 3. **准备(Preparation)**:为类变量分配内存,并设置类变量初始值(默认值)。 4. **解析(Resolution)**:将符号引用转换为直接引用的过程。主要是将类中的符号引用解析为实际的内存地址引用。 5. **初始化(Initialization)**:执行类构造器`<clinit>()`方法,进行静态初始化等操作。 #### 四、Java程序的生命周期 Java程序的生命周期从类的加载开始,到程序结束为止。主要包括以下几个阶段: 1. **启动阶段**:启动Java虚拟机,创建主类的对象并调用其`main()`方法。 2. **运行阶段**:程序开始执行,包括类的加载、初始化、执行程序逻辑等。 3. **执行结束**:程序正常执行完毕或者发生异常导致程序终止。 4. **垃圾回收阶段**:当程序不再使用某些对象时,JVM会自动进行垃圾回收,释放不再使用的对象所占用的内存空间。 #### 五、总结 Java虚拟机(JVM)为Java程序提供了一个安全、可移植的运行环境。通过类加载器,JVM能够按需加载类,实现了高效、灵活的类管理机制。了解类的加载过程对于理解Java程序的执行流程、优化性能等方面具有重要意义。同时,掌握Java程序的生命周期有助于更好地控制程序的运行状态,提高程序的健壮性和效率。

























Java虚拟机和Java程序的生命周期?
Java虚拟机进程从启动到终止的过程叫做Java虚拟机的生命周期。
Java程序从开始允许到终止的过程叫做Java程序的生命周期。
Java虚拟机的生命周期和Java程序的生命周期是一致的。
类的加载,连接,初始化?
当Java程序要使用某个类是,Java虚拟机会保证这个类已经被加载,连接,初始化。
加载:查找并加载类的二进制数据;
连接:分3步:
1.验证:确保被加载类的正确性;
2.准备:为类的静态变量分配类存,并初始化默认值;
3.解析:把类的符号引用转换为直接引用。
初始化:Java虚拟机规范中对所有Java虚拟机实现做了严格规定:所有Java虚拟机实现必须只有在为每个类或接口被Java程序 首次主动使用 时才初始化他们。
Java程序对类的使用方式有两种:主动使用和被动使用。
类的加载?
类加载时指Java虚拟机吧类的class文件中的二进制数据读到内存中来,存放在运行时数据区的方法区内,并在堆区中创建一个class对象,用来封装该类在方法区的数据结构。
类加载的最终产品是堆区中的class对象,它封装了类在方法去中的数据结构,并向Java程序提供了访问该类在方法去内的数据结构的接口。
类加载有类加载器完成:
类加载器分为:Java虚拟机自带的加载器和用户自定义的类加载器;
Java虚拟机自带的类加载器包括:启动类加载器,扩展类加载器,系统类加载器三种。
用户自定义的类加载器是ClassLoader类的实例,通过它来定制类的加载方式。
类加载器并不用等到某个类被主动使用时再加载它,Java虚拟机规范规定:类加载器可以在预料某个类将要被使用时就预先加载它,如果在预先加载过程中遇到class文件缺失或存在错误,类加载器不会立刻报告错误,而是在等到程序首次主动使用该类是才报告错误抛出一个LinkageError错误;如果这个类一直没有被程序主动使用,那么类加载器不会报告错误。
类的验证?
当类被加载后,就进入连接阶段,连接就是把已经读到内存中的类的二进制数据合并到Java虚拟机的运行时环境中去。

- richarl2013-07-23用处不太。谢谢!

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 微信小程序-从零开始Demo(1).zip
- 合同审查要点及质量标准.doc
- 畜禽产品监测项目和检测依据.docx
- 别墅项目销售前景分析.doc
- 韩语四级考试单词.docx
- 青海振动挤密碎石桩施工组织设计方案.doc
- 微信小程序反编译.zip
- 浙江省建设工程造价咨询服务基准收费标准.doc
- 第4篇第2章楼地层、屋盖及阳台、雨篷的基本构造.ppt
- 湖北水厂原水管道安装施工组织设计.doc
- 企业人事管理制度.doc
- 微信小程序:周公解梦境(1).zip
- Taro + Redux + 本地 Mock Server 微信小程序示例项目.zip
- 安装工程货物买卖合同.doc
- 关于地下车库采用机械停车系统造价分析.doc
- 污水处理菌种培植试运行方案.doc


