范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

简单地聊一下java类加载机制

  简单的聊一下java类加载机制
  所谓越是基础的东西越重要,当我们在工作中涉及一些更高级的工作时候,往往对我们的基础要求也就更高。
  而且有些面试官也会问道这个问题,如果回答不上面试官心理如下
  什么是类加载
  类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的 方法区 内,然后在 堆区 创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。
  类加载器并不需要等到某个类被"首次主动使用"时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误)如果这个类一直没有被程序主动使用,那么类加载器就不会报告错误。
  加载.class文件的方式
  – 从本地系统中直接加载
  – 通过网络下载.class文件
  – 从zip,jar等归档文件中加载.class文件
  – 从专有数据库中提取.class文件
  – 将Java源文件动态编译为.class文件 类加载的过程
  类的声明周期如下图
  类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段 加载: 查找并加载类的二进制数据 在加载阶段,虚拟机需要完成以下三件事情
  1、通过一个类的全限定名来获取其定义的二进制字节流。
  2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
  3、在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。
  加载阶段是可控性最强的阶段,因为开发人员既可以使用系统提供的类加载器来完成加载,也可以自定义自己的类加载器来完成加载。加载阶段完成后,虚拟机外部的 二进制字节流就按照虚拟机所需的格式存储在方法区之中,而且在Java堆中也创建一个java.lang.Class类的对象,这样便可以通过该对象访问方法区中的这些数据。 验证: 验证是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。 验证阶段大致会完成4个阶段的检验动作:
  文件格式验证 :验证字节流是否符合Class文件格式的规范;
  元数据验证 :对字节码描述的信息进行语义分析(注意:对比javac编译阶段的语义分析),以保证其描述的信息符合Java语言规范的要求;
  字节码验证 :通过数据流和控制流分析,确定程序语义是合法的、符合逻辑的。
  符号引用验证 :确保解析动作能正确执行。
  验证阶段是非常重要的,但不是必须的,它对程序运行期没有影响,如果所引用的类经过反复验证,那么可以考虑采用-Xverifynone参数来关闭大部分的类验证措施,以缩短虚拟机类加载的时间。 准备:为类的 静态变量 分配内存,并将其初始化为默认值 准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些内存都将在方法区中分配。对于该阶段有以下几点需要注意:
  1、这时候进行内存分配的仅包括类变量(static),而不包括实例变量,实例变量会在对象实例化时随着对象一块分配在Java堆中。
  2、这里所设置的初始值通常情况下是数据类型默认的零值(如0、0L、null、false等),而不是被在Java代码中被显式地赋予的值。
  这里要注意一点,比如
  public static int x = 10;
  在准备阶段的时候赋值的初始值为0(int 的默认值)而不是3 解析:把类中的符号引用转换为直接引用
  解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。 符号引用 就是一组符号来描述目标,可以是任何字面量。直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。 初始化:为类的静态变量赋予正确的初始值,JVM负责对类进行初始化,主要对类变量进行初始化。 对类变量进行初始值设定有两种方式:
  1、声明类变量是指定初始值
  2、使用静态代码块为类变量指定初始值
  JVM初始化步骤:
  1、假如这个类还没有被加载和连接,则程序先加载并连接该类
  2、假如该类的直接父类还没有被初始化,则先初始化其直接父类
  3、假如类中有初始化语句,则系统依次执行这些初始化语句
  类初始化时机:只有当对类的主动使用的时候才会导致类的初始化,类的主动使用包括以下六种:
  1、创建类的实例,也就是new的方式
  2、 访问某个类或接口的静态变量,或者对该静态变量赋值
  3、 调用类的静态方法
  4、 反射(如Class.forName("com.shengsiyuan.Test"))
  5、 初始化某个类的子类,则其父类也会被初始化
  6、 Java虚拟机启动时被标明为启动类的类(Java Test),直接使用java.exe命令来运行某个主类
  我们用一个图来简单地表示下大致的类加载过程
  双亲委派先来了解下类加载器public class ClassLoaderTest {      public static void main(String[] args) {         ClassLoader loader = Thread.currentThread().getContextClassLoader();         System.out.println(loader);         System.out.println(loader.getParent());         System.out.println(loader.getParent().getParent());     } }  // ------- 输出结果 ------- sun.misc.Launcher$AppClassLoader@64fef26a sun.misc.Launcher$ExtClassLoader@1ddd40f3 nullBootstrap ClassLoader:根类(或叫启动、引导类加载器)加载器。
  它负责加载Java的核心类(如String、System等)。它比较特殊,因为它是由原生C++代码实现的,并不是java.lang.ClassLoader的子类 Extension ClassLoader:扩展类加载器。
  它负责加载JRE的扩展目录(%JAVA_HOME%/jre/lib/ext)中JAR包的类,我们可以通过把自己开发的类打包成JAR文件放入扩展目录来为Java扩展核心类以外的新功能。 Application ClassLoader:系统类加载器。
  它负责在JVM启动时加载来自Java命令的-classpath选项、java.class.path系统属性,或CLASSPATH环境变量所指定的JAR包和类路径。 双亲委派
  全盘负责:当一个类加载器加载某个Class时,该Class所依赖和引用的其它Class也将由该类加载器负责载入,除非显式的使用另外一个类加载器来载入。
  双亲委派:当一个类加载器收到了类加载请求,它会把这个请求委派给父(parent)类加载器去完成,依次递归,因此所有的加载请求最终都被传送到顶层的启动类加载器中。只有在父类加载器无法加载该类时子类才尝试从自己类的路径中加载该类。(注意:类加载器中的父子关系并不是类继承上的父子关系,而是类加载器实例之间的关系。)
  缓存机制:缓存机制会保证所有加载过的Class都会被缓存,当程序中需要使用某个类时,类加载器先从缓冲区中搜寻该类,若搜寻不到将读取该类的二进制数据,并转换成Class对象存入缓冲区中。这就是为什么修改了Class后需重启JVM才能生效的原因。

美联邦通信委员会将2家中企列入威胁国家安全名单美国联邦通信委员会(FCC)25日宣布,将中国电信美洲公司中国移动国际(美国)公司,以及俄罗斯网络安全公司卡巴斯基实验室三家企业列入所谓威胁美国国家安全的电信设备和服务供应商名单。喊了快10年的携号转网终于来了移动电信联通谁最受益?喊了快10年的携号转网,这次真的要来了!在部长通道上,领导表示,将在今年年底之前实现所有手机用户自由携号转网。(图片来源于网络)部长都发话了,三大运营商也都在第一时间表了态,将认真乔布斯告诉我们的十大成功理念成功是每个人所追求的,但不是每个人都能取得杰出的成就。这并不能抹杀我们追求成功的动机。至少我们可以从成功者那里学习借鉴一些成功的理念,结合自己为已所用。乔布斯的的一些商业理念就给我孙正义愿景基金已经投资700亿美元铅笔道3月9日讯,据外媒报道,日本软银集团首席执行官孙正义(MasayoshiSon)在接受科技媒体CNBC记者大卫费伯(DavidFaber)的采访时表示,持资1000亿美元的愿重新定义平板,从华为平板M5猜测华为平板M6!华为在MWC大会上发布了华为matebookxpro笔记本之外还有一款重新定义平板的产品华为M5和华为M5pro。图一华为M510。8英寸版本和皮套键盘这两款平板提供8。4英寸和1智能音箱这场硬仗无惧低价难留用户降价补贴用户市场争夺,这一股再次蹿升的智能音箱热潮,是否有着更大的价值和意义?我们店里这个型号卖的挺火的,最近还经常缺货呢。在北京新中关购物中心,一家智能音箱专柜的销售人员热情地作官方发布华为P30P30Pro预热视频,后置三摄四摄PConline资讯华为将于3月26号在法国巴黎举行新品发布会,正式推出新一代旗舰P30系列机型。随着发布会时间的临近,近段时间以来关于P30系列新机的曝光消息也越来越多。今天下午GTX1660确认配备1408个流处理器219美元起图灵家族首款无光追无DLSS抗锯齿的GTX1660Ti刚刚全面铺开,新的GTX1660紧跟着就要来了,当然后边还有GTX1650NVIDIA这一代的节奏让人有点跟不上的感觉。根据某我国芯片市场占比27,某国已经输掉了5G技术之争继华为在5G领域的辉煌之后,中国芯片在海外也取得了令人瞩目的成就。据台湾媒体报道,近年来,我国芯片发展取得了快速进展,其中紫光集团的展讯通信表现最为抢眼。台湾媒体报道,展讯通信的市亏了24年,他用一种技术干懵三星,搞定苹果,华为抢着送钱!文金错刀编辑蔡文姬2019年初,智能手机行业迎来最新的趋势,叫做折叠屏。2月20日,三星在旧金山推出了GalaxyFold4天后,华为在MWC发布了MateX巨头杠起来,自然要分个我至今都不用指纹或人脸解锁,安全技术大佬谈剑锋委员密码丢了可以换,但生物信息不可再生上海众人网络安全技术有限公司创始人,全国政协委员谈剑锋似乎有一种深深的不安全感。他有两部手机,一部用来上网,一部只用来接打电话。我至今不用指纹解锁,也不用人脸解锁,我的手机设置密码
广东电网发力超充充电5分钟,续航两百公里文羊城晚报全媒体记者马灿实习生赵鑫娆通讯员沈甸近日,广东电网电动汽车服务有限公司(以下简称广东电动)联手广汽埃安新能源汽车有限公司(以下简称广汽埃安),在广州南大干线合作投建的集超证监会鼓励相关机构在不损害投资者利益的前提下开展行业网络安全技术应用昝秀丽中国证券报中证网中证网讯(记者昝秀丽)证监会4月29日消息,证监会起草了证券期货业网络安全管理办法(征求意见稿)(以下简称办法),并向社会公开征求意见。在网络安全促进与发展方证监会鼓励相关机构在不损害投资者利益的前提下开展行业网络安全技术应用证监会鼓励相关机构在不损害投资者利益的前提下开展行业网络安全技术应用财联社4月29日电,证监会就证券期货业网络安全管理办法(征求意见稿)公开征求意见。在网络安全促进与发展方面。一是北京银保监局政策性农业保险充分利用互联网技术不断优化服务流程,实现数据多跑腿农户少跑路北京商报讯(记者陈婷婷胡永新)4月27日,北京商报记者从北京银保监局获悉,2021年北京农业保险综合费用率仅12。7,低于全国平均水平6。4个百分点综合赔付率高于全国平均水平10个手机内存卡被取消,完全是意料之中的事!跟不上时代步伐终被淘汰今天要跟大家聊一聊一个古老的话题。第一部智能手机就是128G起步的朋友,应该没有接触过内存卡这种东西。毕竟手机内存卡是顺应手机储存不足而存在的,当年的功能机和初期智能手机在内存这块互联网时代,家居行业迎来新常态面对行业的激烈竞争,不少传统的家居类企业纷纷转型,希望能为企业赢得新的发展机遇,而大部分的转型由于其盲目性和缺乏对互联网人群的研究而处于疲软状态,并未像最初想象的那么简单。当下,互电力北斗开启新疆电网无人机巡检规模化应用时代远程终端控制系统正常,RTK数据回传正常,北斗无人机各项参数均处于正常范围,请求开展线路巡视作业。5月18日,新疆电力北斗精准服务网首次在750千伏凤乌线路为无人机自主巡检提供高精互联网医疗时代,如何保障网络安全?随着互联网大数据云计算技术的快速发展,我国医疗机构的信息化程度越来越高,逐步向数字化医疗智慧医疗发展。然而,新型技术的使用也带来新的安全风险。近年来,医疗系统遭遇网络攻击的事件时有华为造车上瘾!就差亲自上手了,这次联合长安宁德时代这应该是华为参与程度最深的汽车品牌,被命名为阿维塔,旗下第一款情感智能电动轿跑SUV阿维塔11,新车已于5月20号正式开启预订,同时造型和内饰官图也正式发布。阿维塔科技是由长安汽车张琦老师短短三周抖音爆火,知识付费的时代跨步走来了张琦老师从五月份突然爆火,大多数人随时可以刷到,播放量上亿次,增粉5000万,据说变现500个W往上,是不是很神奇,在短视频时代没有不可能!根据相关统计移动互联网用户12亿,短视频骁龙87012GB256GB1亿像素,跌至1699元,千元机配置天花板国内手机市场销量最好的还是千元机,很多用户虽然能够买得起四五千元高端机,但是智能手机更新换代太快了,很多网友觉得没有必要买太贵的手机,因此千元机是很好的选择,对于大多数用户来说,现