JVM——类加载机制

 

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

  在Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。

   类加载的生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(UnLoading)7个阶段。其中验证、准备、解析3个部分统称为连接(Linking)。

  什么情况下需要开始类加载过程的第一阶段:加载?Java虚拟机规范中没有进行强制约束,这点可以交给虚拟机的具体实现来自由把握。但是对于初始化阶段,虚拟机规范则是严格规定了有且只有5种情况必须立即对类进行“初始化”(而加载、验证、准备自然需要在此之前开始): 

  1. 遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条最常见的Java代码场景是:使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。
  2. 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。
  3. 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。
  4. 当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。
  5. 当使用JDK1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行过初始化,字需要先触发其初始化。

  对于这5种会触发类进行初始化的场景,虚拟机规范中使用了一个很强烈的限定语:“有且只有”,这5种场景中的行为称为对一个类进行主动引用。

类的加载过程详解链接

转载于:https://www.cnblogs.com/zhengbin/p/5631349.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统基础知识笔记

一、操作系统相关概念 计算机软件:系统软件和应用软件。 计算机系统资源:硬件资源、软件资源。 硬件资源:中央处理器、存储器、输入、输出等物理设备。 软件资源:以文件形式保存到存储器上的程序和数据信息。 定义:有效…

python一般学多久可以考试_为何Python适合初学者 一般Python要学习多久

为何Python适合初学者?一般Python要学习多久?很多人都觉得,Python是一门很好学的语言,非常适合入门。但更多人都是不清楚具体原因的。那么,我们不如一起来看看Python为何更适合初学者,为何更适合学习吧。另外,这门伟…

操作系统基础:进程知识笔记(一)

进程介绍 进程管理也称为处理机管理。进程主要是为了解决多道程序批处理系统和分时系统中针对多个并发执行的程序,用来描述系统中执行时动态变化过程。进程属于自愿分配和独立运行的基本单位。 1、进程的概念知识 1.1 程序顺序执行的特征 程序顺序执行的特征&#x…

JVM——三个ClassLoader详解

类装载工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java执行时系统组件,它负责在运行时查找和装入Class字节码文件。JVM在运行时会产生三个ClassLoader:根装载器、ExtClassLoader(扩展类装载器)和AppClassL…

c++头文件_51单片机C语言编程知多少:几人不知头文件,你要的干货在这里了

近期写了一些比较大的单片机程序,找了很多参考资料,看了大量别人的程序。我从中发现了自己对于C语言编程还只是知道如何实现功能,但对编程规范掌握的不好,编程习惯也没有很好的养成。学了这么久的单片机,还真是挺难为情…

最常问的MySQL面试题集合

除了基础题部分,本文还收集整理的MySQL面试题还包括如下知识点或题型:MySQL高性能索引SQL语句MySQL查询优化MySQL高扩展高可用MySQL安全性问题1:char、varchar的区别是什么?varchar是变长而char的长度是固定的。如果你的内容是固定…

计算机打印机共享失败,局域网共享打印机连接失败怎么办

在局域网中由于办公需要,经常要连接网络打印机,但是有时候就无法连接,提示各种连接失败,下面是学习啦小编给大家整理的一些有关局域网共享打印机连接失败的解决方法,希望对大家有帮助!局域网共享打印机连接失败的解决方…

idea 中代码大小写切换快捷键

idea用使用 CTRL SHIFT U 使用前: 使用后:

nginx做服务器入口_Nginx实现http反向代理

什么是反向代理?反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器…

操作系统基础:进程知识笔记(二)

一、管程 1、管道概念概念 管道是用于连接一个读进程和一个写进程。用来实现它们之间通信的共享文件。 2、管程的概念 管程是由一些共享数据、一组能为并发进程所执行的作用在共享数据上的操作集合、初始代码、以及存取权组成。管程提供了一种可以允许多线程安全、有效地共享抽…

怎样保护计算机连接线,一根网线把电脑烧了:雷雨天如何保护家电?

记得在小时候,每逢遇到雷雨天气,爸妈总会让我们关掉电视机、电脑等家电,虽然很不情愿,但为了避免电器遭受雷击造成损坏,我们还是会照做。现在长大了,除了知其然,还更要知其所以然,那…

HDU5697 刷题计划 dp+最小乘积生成树

分析:就是不断递归寻找靠近边界的最优解 学习博客(必须先看这个): 1:http://www.cnblogs.com/autsky-jadek/p/3959446.html 2:http://blog.csdn.net/u013849646/article/details/51524748 注:这…

分享我常用的5个免费的在线 SQL 数据库环境,简直太方便了!

大今天给大家分享几个在线的免费 SQL 运行环境,也就是在线数据库。这些网站可以帮助我们快速运行一些 SQL 语句的测试或者验证,同时还可以在网络上进行分享,关键不需要自己安装数据库。SQL FiddleSQL Fiddle 提供了 MySQL、Oracle、PostgreSQ…

r语言 面板数据回归_R语言_018回归

回归分析是统计学的核心。它其实是一个广义的概念,指那些用一个或多个预测变量来预测响应变量的方法。通常,回归分析可以用来挑选与响应变量相关的解释变量,可以描述两者的关系,也可以生成一个等式,通过解释变量来预测…

Integer对象范围(-128-127)之间(Integer. valueOf()方法)

1.Integer. valueOf()方法的作用 Integer. valueOf()可以将基本类型int转换为包装类型Integer,或者将String转换成Integer,String如果为Null或“”都会报错 看下面代码示例 取值为127时 取值为128时 为什么会是这样呢? 首先,我们…

操作系统基础:进程知识笔记(三)

1、死锁概念知识 计算机中存在许多互斥资源(打印机)、软件资源(进程表、临界区)如果两个进程同时调用打印机,或同时进入临界区必然会出现问题。 死锁:指两个以上的进程互相要求对方已经占有的资源导致无法继…

垂直梯形校正画质损失多少_梯形校正功能是怎么实现的?其中可大有学问

梯形校正这个概念,想必大部分投影仪用户早已耳熟能详。所谓的梯形校正,指的是当我们的投影仪位置摆放不正时,投射出来的画面会是一个梯形,这时候需要通过投影仪的梯形校正功能将画面调整为可以正常观看的矩形。虽然目前市场上的大…

操作系统基础:存储管理知识笔记(一)

1、存储器基础知识 存储器管理的对象是主存或内存,存储器是计算机系统中非常关键的资源,用来存放各种信息的主要场所。存 储器管理功能主要包括:主存空间的分配和回收、提供主存利用率、扩充主存、主存信息的保护。 2、存储器结构 存储器结构…

asp点击按钮sql列求和_助你2020晋级互联网大数据阵营(一):轻轻松松学SQL

毫不负责任的说,你和数据科学家最大的鸿沟,就差一个SQL语言:)入门后,后面的事情就简单了为了帮大家尽快入门Hive SQL、学会提数和分析,实现在大数据领域大干一场的愿望,帮你准备好了数据,准备好…