怎么建立个人网站,dede 网站模板,网站不备案能访问吗,重庆市建设工程信息网官网人员公示公告专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录
专栏导航
前言
一、类的生命周期
1.加载#xff08;Loading#xff09;
2.连接#xff08;Linking#xff09;
3.初始化#xff08;Initialization#xff09;
4.使用#xff08;UsingLoading
2.连接Linking
3.初始化Initialization
4.使用Using
5.卸载Unloading
二、加载阶段
总结 前言
JVM作为Java程序的运行环境其负责解释和执行字节码管理内存确保安全支持多线程和提供性能监控工具以及确保程序的跨平台运行。本文主要介绍了类的生命周期、类的加载阶段等内容。 一、类的生命周期
类的生命周期描述了一个类加载、连接、初始化、使用、卸载的整个过程。 1.加载Loading
加载阶段是类的生命周期的起始点。当应用程序首次需要使用某个类时Java虚拟机JVM会负责加载这个类。加载是通过类的加载器ClassLoader完成的它会查找并加载类的二进制数据。这个过程包括将类的字节码从文件系统、JAR文件或网络加载到内存中。
2.连接Linking
连接阶段是加载阶段的后续它包括验证、准备和解析三个子阶段。
验证Verification验证阶段主要是确保被加载的类文件数据符合JVM规范没有安全方面的隐患以及是否与应用程序的其它部分兼容。验证过程包括文件格式验证、元数据验证、字节码验证和符号引用验证。准备Preparation准备阶段是为类的静态变量分配内存并设置默认的初始值。需要注意的是准备阶段并不会执行任何初始化操作。解析Resolution解析阶段是将符号引用转换为直接引用。在Java中符号引用是一个类的全限定名而直接引用是一个直接指向内存中的地址的指针。解析阶段发生在运行时而不是编译时。
3.初始化Initialization
初始化阶段是类加载过程中的最后一步当准备和解析阶段完成后JVM会执行类的构造器方法这个方法是由编译器自动收集类中的所有类变量的赋值动作和静态代码块集合来的。需要注意的是构造器方法中的代码只在类被首次使用时执行一次。
4.使用Using
一旦类被成功加载、连接并初始化后就可以被实例化并用于执行应用程序的业务逻辑。在应用程序运行期间类可能会被频繁地使用。
5.卸载Unloading
当应用程序不再需要某个类时该类的实例以及与其相关的资源将会被回收这个过程就是卸载。但是需要注意的是只有当一个类不再被任何活动对象所引用时它才会被卸载。另外JVM的垃圾回收机制Garbage Collection, GC负责自动处理类的卸载和资源的回收。
二、加载阶段
加载(Loading)阶段是类生命周期的起始点它涉及将类的二进制数据从文件系统或其他来源加载到Java虚拟机中。这个过程主要由类加载器完成它根据类的全限定名获取字节码信息。类加载器可以通过多种方式获取字节码信息包括从JAR文件、ZIP文件、网络或其他自定义源中读取。
加载阶段根据类的全限定名把字节码文件的内容加载并转换成合适的数据放入内存中存放在方法区和堆上。在加载阶段类加载器首先会检查类是否已经被加载过。如果已经加载过则直接返回已加载的类信息否则它会进行以下操作
通过类的全限定名获取类的二进制数据字节码。将字节码信息转换为方法区的内部表示。方法区是Java虚拟机的一个内存区域用于存储已被虚拟机加载的类信息、常量、静态变量等数据。在这个阶段Java虚拟机会为每个加载的类生成一个InstanceKlass对象该对象包含了类的所有信息包括类的实现细节例如多态的实现。在堆中创建一个java.lang.Class对象。这个对象的作用是提供一种在Java代码中访问类的信息的方式以及存储静态字段的数据从JDK8开始。开发者通常只需要通过这个Class对象来访问类的信息而不需要直接访问方法区中的所有数据。这种设计使得Java虚拟机能够更好地控制开发者对数据的访问范围增强了安全性。 通过上述过程类的加载阶段完成了类的二进制数据的读取和解析并将其存储在Java虚拟机的内存中为后续的连接和初始化阶段做好了准备。这个过程对于任何在Java虚拟机上运行的程序都是必不可少的因为它是类能够被执行的前置条件。 总结
JVM是Java程序的运行环境负责字节码解释、内存管理、安全保障、多线程支持、性能监控和跨平台运行。本文主要介绍了类的生命周期、类的加载阶段等内容希望对大家有所帮助。