`

jvm知识点-类加载过程

    博客分类:
  • jvm
阅读更多

一,java的类加载要经历七个过程

加载

  加载类时加载的第一个过程,在这个阶段,将完成三件事:

  1)通过一个类的全限定名获取该类的二进制流

  2)将该二进制中的静态存储结构转化为方法区运行时数据结果

  3)在内存中生成该类的Class对象,作为该类的数据访问入口

验证

 验证的目的就是为了确保Class文件的字节流中的信息不会危害到虚拟机,在该阶段主要完成的以下四种验证

1) 文件格式验证:验证字节流是否符合Class文件的规范,如主次版本号的是否在当前虚拟机范围内,常量池中的常量是否有不被支持的类型

2)元数据验证:对字节码描述的信息进行语义分析,如这个类是否有父类,是否集成了不被继承的类等

3)字节码验证:是整个验证阶段最复杂的一个阶段,通过验证数据流和控制留的分析,确定程序语义是否正确,主要针对方法体的验证。如方法中类型转换验证是否正确,跳转指令是否正确等。

4)符号引用验证:这个动作在后面的解析中发生主要是为了确保解析动作能正确执行。

准备

准备阶段是为了类的静态变量分配内存并将其初始化为默认值,这些内存都将在方法区中进行分配。准备阶段不分配类中的实例变量的内存,实例变量将会在对象实例化时随着对象一起分配在java堆中

 public static int value=123;//在准备阶段value初始值为0 。在初始化阶段才会变为123 。
 解析

 该阶段主要完成符号引用到直接引用的转换动作。解析动作并不一定在初始化动作完成之前,也可能在初始化完成之后

初始化

 初始化是类加载的最后一步,前面的类加载过程中除了用户自定义的类加载器可以参与类加载 ,其余的部分都是虚拟机调用完成,而只有初始化阶段才是用户真正参与java代码初始化

 

综上所述 虚拟机把要描述的类的数据从Class文件加载到内存中,通过校验 解析准备,完成初始化,最终形成被虚拟机直接使用的java类型。

 

二,类加载的双亲委派加载机制

 一个类加载器要加载某个类时,这个类加载器首先不加载这个类,而是委托给自己的父类加载器加载,当父类加载器不能加载时,这个类加载器才进行加载这个类。

三,什么是类加载器,类加载器有那些?

 主要有四类加载器

 1,启动类加载器,用来加载java核心类库,无法被java程序员直接使用

 2,扩展类加载器,它用来加载java的扩展类,java虚拟机的实现会提供一个扩展目录。该类加载器在此目录用查找并加载java类

 3,系统类加载器,它根据java应用的类路径(classpath)加载java类,一般来说java应用的程序都是通过它来加载完成的可以通过ClassLoader.getSystemClassLoader()来获取它

 4,用户自定义加载器,通过继承java.lang.Classloader类完成

 

分享到:
评论

相关推荐

    JVM实战-JVM类加载机制案例分析

    2. **类加载器及类加载器的委托机制**:JVM中有三种内置的类加载器,分别是启动类加载器、扩展类加载器和应用类加载器。此外,还可以自定义类加载器。类加载器之间遵循委托机制,即下级类加载器先请求上级类加载器...

    黑马程序员------类加载器学习注意点

    本文将主要围绕“黑马程序员------类加载器学习注意点”展开,探讨一些关键知识点。 首先,我们需要理解类加载器的基本工作原理。在Java中,类加载过程包括加载(Loading)、验证(Verification)、准备...

    jvm-full-gc调优-jvm-full-gc.zip

    以下将详细介绍JVM Full GC的相关知识点。 1. **理解JVM内存结构**:Java内存主要分为堆内存(Heap)和非堆内存(Non-Heap),其中堆内存又分为新生代(Young Generation)、老年代(Tenured Generation或Old ...

    Java的jvm相关知识点

    Java的JVM(Java Virtual Machine)是Java程序运行的基础,它是一个虚拟的...掌握这些JVM相关知识点,不仅能够帮助Java开发者在面试中脱颖而出,也能在实际开发中更好地调试和优化应用程序,提高软件性能和稳定性。

    Jvm性能优化-JVM内存结构原理分析03

    了解Jvm内存结构、垃圾收集器、类加载器等知识点,可以帮助我们更好地优化Jvm的性能。 在Jvm中,垃圾收集器的选择对性能产生了很大的影响。不同的垃圾收集器适用于不同的场景,选择合适的垃圾收集器可以提高Jvm的...

    JVM图解-JVM指令-JVM原型图.rar

    下面,我们将深入探讨JVM的一些关键知识点。 1. **JVM架构**: - **类加载器**:负责加载.class文件,确保程序运行所需的类能够被找到并加载到内存中。 - **运行数据区**:包括堆、方法区、虚拟机栈、本地方法栈...

    JVM 参数调优-optimization-jvm.zip

    虽然具体的文件内容未给出,但我们可以根据标题和描述来讨论JVM调优的一些关键知识点。 1. **JVM内存模型**:JVM内存主要分为堆内存(Heap)、方法区(Method Area)、虚拟机栈(JVM Stack)、本地方法栈(Native ...

    JVM 调优演示-JVM.zip

    本资料"JVM 调优演示-JVM.zip"包含了一个名为"JVM-master"的项目,我们可以从以下几个方面来探讨JVM调优的相关知识点: 1. **垃圾收集器**:JVM中的垃圾收集器负责自动回收不再使用的对象所占用的内存。不同的垃圾...

    jvm基础知识与调优-jvm-training.zip

    Java虚拟机(JVM)是Java程序运行的基础,它提供了执行字节码的平台无关环境。JVM基础知识与调优是每一个Java开发者都需要掌握的...这份"jvm-training"资料包将帮助你系统学习这些关键知识点,成为Java性能优化的专家。

    JVM--字节码和类的加载篇1

    总结起来,"JVM--字节码和类的加载篇1"涉及到的知识点主要包括: 1. Java Class文件结构,特别是魔数和文件版本号的作用。 2. 数据类型在Class文件中的表示,如无符号数和表。 3. 常量池的概念及其在Class文件解析...

    JVM从0-1学习,掌握如何解决JVM相关问题

    从0-1学习JVM,你需要理解以下几个关键知识点: 1. **JVM架构**:JVM主要由类加载器、运行时数据区、执行引擎、本地方法接口和本地库组成。每个部分都有其特定的功能,如类加载器负责加载类文件,执行引擎负责解释...

    jvm 调优笔记-jvm.zip

    以下是对这些关键知识点的详细阐述: 1. **堆内存配置** - **新生代与老年代**:JVM堆内存分为新生代和老年代,新生代主要存放新创建的对象,而老年代则保存生命周期较长的对象。调整新生代和老年代的比例可以影响...

    JVM调优测试-jvmDemo.zip

    下面,我们将深入探讨JVM调优的相关知识点。 1. **JVM内存模型**:JVM内存分为堆内存(Heap)、方法区(Method Area)、虚拟机栈(JVM Stack)、本地方法栈(Native Method Stack)和程序计数器(PC Register)。...

    jvm知识点总览(类的加载机制+内存结构+GC算法 垃圾回收+GC分析 命令调优)

    总的来说,理解JVM的类加载机制、内存结构、GC算法和调优是成为一名熟练的Java开发者的必备知识。这不仅能帮助开发者编写更高效的代码,还能有效地避免内存泄漏和性能瓶颈,提升应用程序的稳定性和性能。

    JVM类加载分析

    在深入理解Java虚拟机的工作原理时,类加载机制是一个不可忽视的重要知识点。这篇博客将探讨JVM如何加载、连接和初始化类,以及这一过程中的关键概念和技术。 一、类加载器 类加载器是JVM实现动态加载的核心组件,...

    Java虚拟机JVM类加载初始化

    下面将详细讨论类加载的各个阶段以及相关的知识点。 1. 类加载(Load): 当Java虚拟机需要使用某个类时,首先会进行类加载。这通常涉及从磁盘、网络或压缩文件中读取`.class`文件。加载过程中,字节码被转换为...

    JVM思维导图(包含所有JVM知识)

    Java虚拟机(JVM)是Java程序运行的基础,它提供了内存管理、类...理解这些JVM知识点对于优化Java应用性能、排查内存泄漏等问题至关重要。通过不断学习和实践,开发者可以更好地驾驭JVM,确保Java程序高效稳定地运行。

    JVM-SANDBOX基于JVM的实时无侵入AOP框架容器

    使用JVM-SANDBOX时,需要了解JVM的类加载机制,理解字节码操作,以及熟悉Java动态代理相关的知识。配合`alibaba-jvm-sandbox-35eae8e`这样的库,开发者可以更高效地利用JVM-SANDBOX进行各种实时的AOP操作。 总的来...

    JVM:类加载器子系统.pdf

    下面详细阐述类加载器子系统的主要知识点。 首先,类加载器子系统的作用是将.class文件转换成JVM内部的数据结构,并且存放到方法区中。这个过程不是由 ExecutionEngine 决定的,而是由 ClassLoader 完成。类加载器...

    jvm知识点总览完整版

    ### JVM知识点总览 #### JVM概述与重要性 在IT领域,尤其是对于Java开发者而言,JVM(Java Virtual Machine,Java虚拟机)的重要性不言而喻。正如武术中所说的“内外兼修”,对于初级程序员来说,掌握框架和API的...

Global site tag (gtag.js) - Google Analytics