深入理解java虚拟机---4虚拟机类加载机制

星期天去哪玩o      2022-04-24     736

关键词:

类加载的整个生命周期:

   加载、连接(验证、准备、解析)、初始化、使用、卸载。

加载:

     class文件中的二进制数据读取到内存中,然后将该字节流所代表的静态数据结构转化为方法区中运行的数据结构,并且在堆内存中生成一个java.lang.Class对象作为访问方法区数据结构的入口

验证:

  确保当前class文件的字节流所包含的内容符合当前JVM的规范要求,并且不会出现危害JVM自身安全的代码,当前字节流不符合规范会抛出VerifyError的异常,或者子异常,验证的信息有:

(1)文件格式:验证二进制文件是什么类型,验证是否符合当前JVM规范。

(2)元数据验证:检查类是否有父类、接口,验证其父类、接口的合法性,    验证被final修饰的类,  验证是否是抽象类,是否实现了父类的抽象方法或者接口中的方法,   验证方法的重载。

(3)字节码验证,主要验证程序的控制流程比如循环、分支等。

(4)符号验证,主要验证符号引用转换为直接引用时的合法性。

准备:

  当一个Class文件的字节流通过验证,就开始为该对象的类变量,也就是静态变量,分配内存和初始值,各种数据类型的初始值基本都是0值,被final修饰则为指定值。

解析:

  所谓解析就是指在常量池中找到类、接口、方法、字段的符号引用,并将其替换为直接引用的过程。

初始化:

  执行<clinit>()方法(clinit是class initialize的简写),<clinit>()方法再编译过程中生成,此方法中包含了所有类变量的赋值以及静态代码语句块的执行代码,编译器收集的顺序是由执行语句在源文件中的出现顺序来决定的,静态语句块只能对后面的静态变量进行赋值,而不能对其进行访问

 

使用、卸载:

  顾名思义,就是使用跟卸载。

双亲委派机制:

  两种类加载器:

1、 启动类加载器(由C++实现,是虚拟机自身的一部分)(lib目录下的)

2、其他类加载器(由java语言实现,独立于虚拟机外,并且全部继承抽象类ClassLoader),包括:扩展类加载器(lib/ext目录下的)、应用程序类加载器(classPath上的类库)、自定义加载器。

  除了顶层的启动类加载器,其他类加载器都必须要有自己的父类加载器,这种是以组合方式来复用父加载器的代码。

  工作过程:类加载——>尝试父类加载parent.loadClass——>成功则加载完成,失败则自己加载findClass

 

深入理解java虚拟机--虚拟机类加载机制(代码片段)

...4.双亲委派机制4.1双亲委派机制说明4.2好处本文参考于《深入理解Java虚拟机》1.虚拟机类加载机制说明Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接... 查看详情

《深入理解jvm——虚拟机类加载机制》

JVM深入理解JVM(5)——虚拟机类加载机制 PostedbyCrowonAugust21,2017在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用。而虚拟机中,而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟... 查看详情

《深入理解jvm——虚拟机类加载机制》(代码片段)

JVM深入理解JVM(5)——虚拟机类加载机制 PostedbyCrowonAugust21,2017在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用。而虚拟机中,而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟... 查看详情

深入理解jvm读书笔记三:虚拟机类加载机制

Java虚拟机类加载机制是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。7.1概述与那些在编译时需要进行链接工作的语言不同,在Java语言里面,... 查看详情

《深入理解java虚拟机》-----第7章虚拟机类加载机制——java高级开发必须懂的(代码片段)

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。7.1概述上一章我们了解了Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能... 查看详情

虚拟机类加载机制——类加载时机

...于道行不够深,所以此篇类加载机制的讲解主要来自于《深入理解Java虚拟机——JVM高级特性与最佳实践》的第7章虚拟机类加载机制。在前面《初识Java反射》中我们在开头提到要了解Java反射,就得要了解虚拟机的类加载机... 查看详情

深入理解jvm学习笔记——-7虚拟机类加载机制★

你只管努力,——剩下的交给时光。在Java语言中,类型的加载、连接和初始化都是在程序运行期间完成的。我们写的java文件是不能直接运行的,可以在IDE中右键文件名点击运行,这中间其实掺杂了一系列的复杂... 查看详情

虚拟机类加载机制(代码片段)

本文参考《深入理解java虚拟机》虚拟机加载类的过程:java源程序被编译器编译成class文件后,会被虚拟机的类加载器加载,加载完成后,会为class文件在内存中开辟一块空间用来存储class文件对象,之后对class文件进行校验,准... 查看详情

深入了解jvm——虚拟机类加载机制

本文为《深入理解Java虚拟机》第七章内容的学习笔记,部分内容经过二次加工。若对相关知识感兴趣,推荐购书深入阅读。若认为文章涉嫌侵权,请联系作者及时删除。本作品采用知识共享署名-非商业性使用-相同方... 查看详情

虚拟机类加载机制(代码片段)

摘自《深入理解Java虚拟机:JVM高级特性与最佳实践》(第二版)       虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型ÿ... 查看详情

深入了解jvm——虚拟机类加载机制

本文为《深入理解Java虚拟机》第七章内容的学习笔记,部分内容经过二次加工。若对相关知识感兴趣,推荐购书深入阅读。若认为文章涉嫌侵权,请联系作者及时删除。本作品采用知识共享署名-非商业性使用-相同方... 查看详情

虚拟机类加载机制——类加载器

《深入理解Java虚拟机》一书中将类的加载过程放到了类加载器前面一节,但在这里我想先讲“类加载器”。在上一篇类加载时机中我们用大量篇幅来讲解了类加载过程中的5个步骤的最后一步——初始化。在这一节中... 查看详情

读书·深入理解java虚拟机(代码片段)

前言Java内存区域运行时数据区1.程序计数器2.Java虚拟机栈3.本地方法栈4.Java堆5.方法区内存溢出和垃圾回收1.内存溢出2.垃圾回收3.内存分配与回收策略虚拟机类加载机制1.加载2.验证3.准备4.解析5.初始化前言欢迎关注微信公众号“... 查看详情

深入理解java虚拟机

title:深入理解Java虚拟机date:2020-05-1410:58:24tags:JVM,虚拟机目录title:深入理解Java虚拟机date:2020-05-1410:58:24tags:JVM,虚拟机1.运行时数据区域2.GC垃圾回收3.内存分配与回收策略4.类加载机制1.加载2.验证3.准备4.解析5.初始化5.类与类加载器1.... 查看详情

深入理解java虚拟机——类加载机制(代码片段)

文章目录类加载机制类的生命周期类的加载过程1、加载2、验证3、准备4、解析5、初始化类的初始化时机类加载器类与类加载器类加载器分类双亲委派模型工作过程源码分析双亲委派机制的好处类加载机制类的生命周期一个类型... 查看详情

1.虚拟机类加载机制

Java虚拟机的类加载机制1.Java虚拟机的特点1.1语言无关性Java虚拟机并不进进支持java语言,可以支持JRuby,JPython,Scala等1.2平台无关性Java天生就是为了摆脱操作系统的束缚而产生的,提出了一个"编译一次,任意运行"的口号总结:J... 查看详情

java虚拟机之虚拟机类加载机制

此处主要需要知道什么是java虚拟机?java虚拟机如何进行类加载的?java语言本身是编译型和解释型的语言,先对本地的java文件进行编译,编译后会在本地生成一个class文件,而这个生成的class文件就是java虚拟机需要加载的类所谓... 查看详情

深入理解java虚拟机——类加载机制概述

一、类加载机制概述虚拟机把描述类的数据从Class文件加载加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java语言里面,类型的加... 查看详情