`
janeky
  • 浏览: 365939 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jvm学习笔记(6)类加载机制

    博客分类:
  • jvm
阅读更多

  • 简述
  • 我们要运行java程序,必须保证jvm已经加载类所需的类。这个过程是怎样的呢

  • 类的生命周期

  • 包括了装载,连接(包括验证、准备和解析)和初始化

  • 加载
  • 将二进制字节码读入jvm。包括以下阶段:
    1.通过类的全限定名获得定义此类的二进制数据流
    2.将字节流转化为方法区的内部数据结构
    3.在jvm堆中生成java.lang.Class实例,成为java程序与内部数据结构之间的接口

    怎么生成二进制流?有很多种方式,例如本地文件系统加载,网络下载,jar提取,动态编译等。类加载器不需要等到某个类型初次时候才装载,可以预先加载,但是等到使用时,如果装载出现问题,才报错。

  • 验证
  • 是为了保证Class文件字节流包含的信息符号jvm的要求,不会危害jvm运行的安全
    包括几个方面:
    1.文件格式验证。例如magic number,版本号 和 常量池数据合法性等
    2.元数据验证。就是验证是否符合java语言规范。例如是否继承了final类等
    3.字节码验证。涉及到指令的细节了。包括类型检查,跳转指令
    4.引用符号的验证。验证通过符号能否找到相关的信息

  • 准备
  • jvm为类变量分配内存,设置默认的初始值(例如int 的默认初始值0)。假如有个类变量 int a = 1;在准备阶段,它的值是0.只有到了初始化阶段,它才真正被赋值1.而 static final int a = 1;又比较特殊,jvm在ConstantValue找到了它的值,所以就直接赋值为1

  • 解析
  • 这个步骤是可选的。只有符号引用被程序首次使用时才进行。解析过程就是将符号引用转为直接引用的过程。包括类、接口、字段和方法的解析

  • 初始化
  • 什么时候要初始化?
    1.遇到new、 getstatic、putstatic或invokestatic四条指令。通俗一点讲,就是new一个对象、读取静态字段、设置静态字段(final的特殊,在准备阶段已经完成)或者调用某个类的静态方法。
    2.其他特殊的创建对象方式(反射、克隆或者发序列化)
    3.初始化子类,发现父类还没有被初始化,此事会先初始化父类
    4.jvm启动时,用户指定要执行的主类(main函数所在的类)

    初始化过程,就是给成员变量赋值的过程。类变量的初始化,和static语句块的执行都是在()函数中进行的。这个函数是jvm自动生成的,程序无法直接调用。我们看class文件的字节码就可以找到它。它里面代码的执行顺序是根据赋值语句在代码中出现的顺序依次执行。所以,static语句块只能访问它前面定义的变量。父类的()肯定在子类的()之前执行。接下来就执行构造函数了。

  • 参考资料
  • 1.深入java虚拟机
    2.深入理解java虚拟机

    2
    3
    分享到:
    评论

    相关推荐

      jvm学习笔记(jvm内存模型&垃圾收集算法&类加载机制)

      在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这...

      JVM学习笔记(一)

      ### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...

      java之jvm学习笔记五(实践写自己的类装载器)

      这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态加载类到JVM中。Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、...

      JVM学习笔记.docx

      本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...

      java之jvm学习笔记十一(访问控制器)-源码

      本文将深入探讨JVM中的访问控制器,主要基于“java之jvm学习笔记十一(访问控制器)-源码”这一主题,以及相关的源码分析。 首先,我们得了解Java的安全模型。Java安全模型基于一种称为安全管理器(SecurityManager)...

      jVM学习笔记.ppt

      这一过程涉及到类加载机制,包括Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader和Custom ClassLoader,它们按照特定的层次关系和加载顺序加载类,确保类的唯一性。 类执行机制中,JVM基于栈的架构...

      Java虚拟机JVM类加载学习笔记

      Java虚拟机(JVM)是Java程序的核心组成部分,它负责执行字节码并...理解JVM的类加载机制对于优化程序性能、解决类加载问题以及深入学习Java运行机制至关重要。开发者应当掌握这些概念,以便更好地编写和调试Java代码。

      深入Java虚拟机JVM类加载学习笔记

      ### 深入Java虚拟机JVM类加载学习笔记 #### 一、Classloader机制解析 在Java虚拟机(JVM)中,类加载器(ClassLoader)是负责将类的`.class`文件加载到内存中的重要组件。理解类加载器的工作原理对于深入掌握JVM以及...

      JVM学习笔记(一)——类的加载机制

      Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是类加载机制。类加载机制负责将Java源代码编译成的.class文件转换为内存中的数据结构,以便程序可以执行。本篇将深入探讨类加载机制的原理和过程。 ...

      JVM 学习笔记(Java虚拟机)

      **JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...

      JVM学习资料+笔记

      1. 类加载机制:JVM按照类加载器、双亲委派模型、验证、准备、解析、初始化等步骤加载类。了解这一过程有助于理解类的生命周期和防止类冲突。 2. 字节码执行引擎:JVM通过解释器和即时编译器(JIT)来执行字节码,...

      jvm视频及笔记

      "jvm视频及笔记"这个资源显然是一份全面学习JVM的材料,结合了视频教程和书面笔记,帮助学习者深入理解JVM的工作原理及其在实际开发中的应用。 JVM的学习可以从以下几个重要的知识点开始: 1. **JVM架构**:JVM...

      JVM工作原理学习笔记

      Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。本文将深入探讨JVM的工作...这本《JVM工作原理学习笔记》应包含了这些内容的详细讲解,对于学习和提升JVM相关知识极具价值。

      Java 虚拟机学习笔记:Java 内存区域,垃圾收集,内存分配与回收策略,JVM 调优,文件结构,类加载机制,Java 程序

      类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行。Java具有简单、可移植、高性能和安全性等特点,因此被广泛应用...

      JVM学习笔记核心知识点整理

      ### JVM学习笔记核心知识点整理 #### 一、引言与背景 随着软件开发技术的不断发展,Java作为一种广泛应用的编程语言,其背后的核心技术——Java虚拟机(JVM)的重要性日益凸显。掌握JVM不仅可以帮助开发者更好地理解...

      jvm笔记

      今天,我们要讨论的是 JVM 的笔记,这个笔记包括了 JVM 的基本结构、类加载机制、类文件格式等内容。 首先,让我们来看一下 JVM 的基本结构。JVM 可以分为三个部分:CLASS LOADER、RUN TIME DATA AREA 和 EXECUTION...

      jvm学习笔记

      《JVM学习笔记》 Java虚拟机(JVM)是Java平台的核心组成部分,它负责运行所有的Java应用程序。这篇笔记将深入探讨JVM的工作原理、内存管理、类加载机制以及优化策略,帮助读者全面理解JVM并提升Java程序的性能。 ...

      JVM笔记(阳哥).zip

      这份笔记涵盖了JVM的基础概念、内存管理、类加载机制、性能优化等多个方面,对于理解Java程序的运行机制以及提升开发效率具有重要的指导意义。 一、JVM基础 Java虚拟机(JVM)是Java程序运行的核心,它提供了平台...

      JVM的学习笔记PDF版

      2. **类加载机制**:Java的类加载过程包括加载、验证、准备、解析和初始化五个阶段。类加载器根据全限定名动态加载类文件,验证确保类文件的正确性,准备阶段分配内存并初始化静态变量,解析将符号引用转换为直接...

      狂神说JVM探究.rar

      2. **类加载机制**: - 类的生命周期包括加载、验证、准备、初始化和卸载五个阶段。 - 双亲委派模型:类加载器在加载类时,会将任务委托给父类加载器,直到Bootstrap ClassLoader。 3. **内存区域**: - 程序...

    Global site tag (gtag.js) - Google Analytics