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,一经查实,立即删除!

相关文章

操作系统基础知识笔记

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

数据库字段

一、数据库设计 1、关键单词 (1)、预付:prepay (2)、记账:bill (3)、发票:invoice (4)、备注:remark (5&#xff09…

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

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

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

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

ngod规范_NGOD的架构说明与比较

下一代视频点播服务(NGOD)的架构说明与比较目录1ISA和NGOD的诞生背景......................................................................................21.1为什么要运营商制定标准?...................................................................2…

计算机电子琴弹奏怎么打开,怎么打开电脑键盘电子琴软件

五、使用对话框中的快捷键   目的快捷键   取消当前任务 ESC   如果当前控件是个按钮,要   单击该按钮或者如果当前控   件是个复选框,要选择或清   除该复选框或者如果当前控   件是个选项按钮,要单击该   选项空格键   单…

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的长度是固定的。如果你的内容是固定…

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

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

高斯模糊java代码_OpenCV3 Java图形图像上的高斯模糊(Imgproc.GaussianBlur)

代码案例:package com.what21.opencv.demo;import org.opencv.core.Core;import org.opencv.core.Mat;import org.opencv.core.Size;import org.opencv.imgcodecs.Imgcodecs;import org.opencv.imgproc.Imgproc;public class GaussianBlur {public static void main…

实时数据集成

企业应用集成 面向服务的体系结构 (SOA) 目前应该是一个很受欢迎的名词,中间件技术人员几乎到了言必称SOA的程度,数据集成当然也不例外,在Oracle openworld2008大会上,就推出了一堆数据集成的专场演讲,其中和SOA结合最…

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 注:这…

pos加盟申请php_ThinkPHP万能表单程序源码 报名预约加盟申请调查表单程序源码

平台声明:本商品由平台商家发布,如果本商品源码侵犯了您的利益请在上方价格右侧或联系平台客服举报。微信表单-实现各行业的报名、预约、加盟申请、问卷调查等应用01.自定义表单模型(自定义字段支持字符串、数字、单选、多选、下拉、日历、时间、邮件、省…

分析Java中的三种不同变量的区别

1、首先分析Java中的三种不同变量的区别,如下表所示 概念默认值其他类变量 也叫静态变量,是类中独立于方法之外的变量 用static 修饰 有默认初始值,系统自动初始化。 如boolean默认为false. 可以被public,protect,pr…