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

Java类加载过程

  Java类是如何编译以及加载到Java虚拟机中呢? 看下图所示,简要概括了整个相关流程:
  1.编译
  在Java技术中,有下面三种类型的编译器:
  前端编译器:把*.java文件转变成*.class文件。代表性的产品有JDK的Javac、Eclipse JDT中的增量式编译器(ECJ)。
  即时编译器:通常称为JIT编译器(Just In Time Compiler),运行期把字节码转变成本地机器码。代表产品有HotSpot虚拟机的C1、C2编译器,Graal编译器。
  提前编译器:通常称为AOT编译器(Ahead Of Time Compiler),直接把程序编译成与目标机器指令集相关的二进制代码。代表产品有JDK的Jaotc、GNU Compiler for the Java(GCJ)、Excelsior JET。
  其中,最符合我们对Java程序编译认知的是前端编译器,也是本文要重点介绍的。
  词法、语法分析
  词法分析是将源代码的字符转变为标记(Token)集合的过程,单个字符是代码源文件编写时的最小元素,但标记才是编译时的最小元素。关键字、变量名、字面量、运算符都可以作为标记。如"int x = y + 1"这句代码中就包含了6个标记,分别是int、x、=、y、+、1,虽然关键字int由3个字符组成,但它是一个独立的标记,不可再拆分。词法分析过程由com.sun.tools.javac.parser.Scanner类来实现。
  语法分析是根据标记序列构造抽象语法树的过程,抽象语法树(Abstract Syntax Tree,AST)是一种用来描述程序代码语法结构的树形表示方式,抽象语法树的每一个节点都代表着程序代码中的一个语法结构,例如包、类型、修饰符、运算符、接口、返回值,甚至代码注释都可以是一种特定的语法结构。语法分析过程由com.sun.tools.javac.parser.Parser类实现,构造出的抽象语法树以com.sun.tools.javac.tree.JCTree类表示。
  注解处理器
  JDK5之后,Java语言提供了对注解(Annotations)的支持。原本设计上,注解与普通Java代码一样,都只会在程序运行期间发挥作用,但在JDK6又提出并设计了一组被称为"插入式注解处理器"的标准API,可以提前至编译期对代码中的特定注解进行处理,从而影响到前端编译器的工作过程。开发人员能使用插入式注解处理器来实现许多原本只能在编码中由人工完成的事情。比如我们常用的Lombok,它可以通过注解来实现自动产生getter/setter方法等等,帮助我们提升开发效率并消除冗长的Java代码。
  语义分析
  经过语法分析之后,编译器获得了程序代码的抽象语法树表示,抽象语法树能够表示一个结构正确的源程序,但无法保证源程序的语义是符合逻辑的。所以,语义分析的主要任务是对结构上正确的源程序进行上下文相关的检查,比如类型检查、控制流检查等等。我们编写代码时,在IDE中看到的由红线标注的错误提示,绝大部分都是来源于语义分析阶段的检查结果。
  字节码生成
  字节码生成是Javac编译过程的最后一个阶段,由com.sun.tools.javac.jvm.Gen类来完成。字节码生成阶段不仅仅是把前面各个步骤所生成的信息转化成字节码指令写到磁盘中,编译器还进行了少量的代码添加和转换工作,如添加默认构造函数、把字符串的+操作替换为StringBuffer或StringBuilder的append()操作等等。最终,生成class文件,编译过程结束。
  即时编译(JIT,Just In Time Compiler)
  在程序执行过程中能够随着程序的需要生成并执行新的代码即称为即时编译。在目前大多数虚拟机里面都实现了JIT即时编译技术。虽然Java虚拟机规范并没有明确指出必须实现它,但是JIT编译性能、代码优化程度却是衡量一款虚拟机最关键的指标之一。
  2.加载
  类加载器完成类的加载,主要包括三部分工作:获取class字节码文件二进制字节流将文件静态结构载入内存方法区转化为运行时数据结构,即类信息将载入后的类信息进行组装,在堆空间中生成类对象
  类加载器
  JVM预定义了三种类型类加载器:
  Bootstrap Classloader(启动类加载器):是用本地代码实现的类装入器,它负责将
  /jre/lib下面的类库加载到内存中(比如rt.jar)。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。
  Extension Classloader(标准扩展类加载器):是由sun.misc.Launcher$ExtClassLoader实现的。它负责将/jre/lib/ext目录或者由系统变量java.ext.dirs指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。
  System Classloader(系统类加载器):是由sun.misc.Launcher$AppClassLoader实现的。它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。开发者可以直接使用系统类加载器。
  双亲委派
  当前类加载器需要加载某个类时不会自己直接去加载,而是尝试将加载这个类的任务向上传递交给父加载器去完成,如果父类加载器能加载则由父类加载器来完成而自己不会再去加载。双亲委派模式的具体工作过程如下:
  ①当System ClassLoader 收到一个类加载请求时,他首先不会自己去尝试加载这个类,而是将这个请求委派给父类加载器Extension ClassLoader去完成。
  ②当Extension ClassLoader收到一个类加载请求时,他首先也不会自己去尝试加载这个类,而是将请求委派给父类加载器Bootstrap ClassLoader去完成。
  ③如果Bootstrap ClassLoader加载失败(在/lib中未找到所需类),就会让Extension ClassLoader尝试加载。
  ④如果Extension ClassLoader也加载失败,就会使用System ClassLoader加载。
  ⑤如果System ClassLoader也加载失败,就会使用自定义加载器(User Classloader)去尝试加载。
  一个简单示意图,有助于理解:
  双亲委派模式优点避免重复加载
  Java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种层级关系可以避免类的重复加载,当父亲已经加载了该类时,子ClassLoader就没有机会加载。
  避免JDK核心类被篡改
  考虑这样一个问题:能不能自己写个类叫 java.lang.System ?
  答案:JDK中的System核心类是Bootstrap加载器加载的,就算自己重写,当加载自定义的System类时,通过双亲委托模式传递到Bootstrap加载器,Bootstrap加载器发现该类已被加载,所以并不会再次加载自定义的System类,总是使用JDK自带的System类,自己写的System类根本没有机会被加载。这样可以防止JDK核心类被随意篡改。
  显式加载与隐式加载
  显式加载:程序主动调用下列方法之一去主动加载一个类classloader.loadClass(className)Class.forName(className)
  隐式加载:被显式加载的类对其它类可能存在如下引用继承(extend)实现接口(implements)域变量方法定义方法中定义的本地变量
  被引用的类会被动地一并加载到JVM,这种加载方式属于隐式加载。

缅甸的美女抓鱼,周围没人就完全不顾形象了,网友我恋爱了我国有很多人,出国旅行在平常不过了,每当有假期的时候,人们都愿意和亲朋好友一起出门游玩一番。(此处已添加小程序,请到今日头条客户端查看)对于中国游客来说,东南亚地区是出国旅行的首选践行雷锋精神,做数字时代先锋辽宁既是雷锋精神的发祥地,也是全国学雷锋活动的重要策源地。辽宁移动作为服务全省4300万人民的骨干央企,多年来始终坚守红色初心,践行为民服务使命,学雷锋,树新风,办实事,暖人心。雷一双丝袜,一间被锁的书房,揭开了老公不可告人的秘密,悬疑漫画更新追凶者第2季之丝袜(第1集)明天发布专栏全集(共4集)绘画温小花小铃铛脚本十万加本期漫画追凶者第2季的章节。女主雯雯和丈夫徐哲结婚一年,依然如胶似漆,感情非常好。她的老公是许多张志军委员用科研促进三产融合(新时代新征程新伟业代表委员履职故事)乡村振兴,必须有乡村产业,这就要求我们农业科技人员要从农产品全产业链角度,关注相关技术对产业的支持。全国政协委员天津市农业科学院农产品保鲜与加工技术研究所所长张志军接受采访时,正忙一孕傻三年竟是真的?最新研究给出明确结论,看完涨知识了这天,妇产科门诊来了一位满脸愁容的年轻女性,可是她的举止和样貌都十分有气质,医生看到后也觉得有些诧异。随后,医生开始耐心地询问女士的情况。一听到医生的寒暄,女士就忍不住小声抽泣起来体适能训练提高儿童运动认知动作学习对孩子一生的发展都有非常重要的意义,身体运动受到大脑控制,同时运动本身也促进大脑发育,在儿童阶段,培养良好的身体感觉和基础动作能力对于未来孩子学习运动技能和身体活动都大有益傅姓男孩2023应该起个勇气非凡阳光帅气的名字傅姓是一个多民族的姓氏群体,但在姓氏发展的历史以来,傅姓的人口增长率并不高,在最新的人口统计中,如果以人口计算为百家姓排名,那么傅姓排名在前五十五名以内,将近七百万的人口量,主要集那些开播王炸,却逃不过烂尾命运的综艺,早该见好就收文9号探秘人编辑9号探秘人近几年,没有上过综艺的艺人屈指可数。无论是唱歌出身还是演戏出身,在无数明星看到综艺火爆之后,都纷纷转向综艺,毕竟综艺不仅能赚钱,而且还可以浑水摸鱼。对于一赛琳娜狠撕比伯老婆,金小妹煽风点火!网友们吃瓜停不下来话说,北美意难忘居然又双叒出续集了!比伯老婆海莉被曝拉上闺蜜凯莉暗讽赛琳娜,结果一连串的八卦被披露,凯莉反过来暗指海莉是三。这次前所未有地引发全网粉丝参战,海莉和凯莉疯狂掉粉,赛琳决胜局81制胜!国乒天才为樊振东复仇,张本遭逆转无缘决赛WTT挑战赛果阿站继续进行,上轮樊振东爆冷惨遭淘汰引发巨大争议,甚至让国乒男队从上至下遭到质疑。好在之后进行的比赛中,年少有为且被当作未来核心培养的林诗栋不负众望,鏖战五局并被对手联环药业2022年净利润同比增长18。96拟10派1。5元中证智能财讯联环药业(600513)3月3日披露2022年年度报告。公司全年实现营业总收入19。55亿元,同比增长18。80归母净利润1。41亿元,同比增长18。96扣非净利润1。
桓氏家族的冒险基因,完胜司马家的腹黑传统如大多数以学术起家的士族一样,谯国桓氏的先祖是东汉大儒桓荣。不过,桓家在三国时期卷入了著名的高平陵事变。当时,桓范被誉为曹爽智囊,他劝曹爽兄弟拒不投降,撤到许昌,号召天下兵马与司马大龄备孕经历本来就晚婚(32岁),婚后边上班边备孕一直不得如愿,年龄也越来越大,便辞去工作全身心备孕。检查身体排查出所有有可能影响怀孕的因素,身体基本都没问题了,专心记录排卵期测体温打B超安排妈妈得肺癌这段时间很痛苦,妈妈去世后我更加痛苦我是一个32岁十岁孩子的妈妈,三月份我妈妈查处了肺癌,而我在山东一家三口经营一家包子铺。得道这个消息后,我不知所措,倒是没有觉得多可怕,多担心!这样的心理活动大家可能觉得我无情!原众星悼念金铁霖,戴玉强曝其睡梦中去世,儿子连夜赶回见最后一面11月15日当天一个噩耗传来,有着被大众誉为业界泰斗的金铁霖前辈去世的消息曝出当这则消息曝光的时候可以说是全网痛心的存在,没人能接受恩师的去世就在其去世的消息曝光之后,圈内人纷纷开郭晶晶一张顶级名媛聚会私照曝光,打脸多少人越节制的人越高级前段时间,一向低调的郭晶晶参加了一场顶级名媛聚会。这个派对的举办者也来头不小,是香港名媛圈的核心人物冯余慕庄。她可是香港利丰集团主席冯国纶的儿媳,妥妥豪门媳妇一枚。其余的嘉宾也都是小燕子和知画谁才是正妻?睡衣旗头上的区别,当家主母一看便知如今影视剧市场逐渐呈现颓靡之势,呈现出开到荼蘼的气息,一部2011年首播的甄嬛传被网友们盘到包浆,穷极无聊的剧迷们连一丝一毫的小细节都不愿错过。这让我想起了我小学时的热播的那些精彩众星社死名场面晕倒假摔丢耳坠戒指掉假发片,丑态百出嘿,这里是辣条走红毯对于明星来说很重要,这是他们出彩的好时机,尤其是前些年红毯典礼上各路明星,各种花招,使尽浑身解数搏出圈。对此自然引来了不少骂名,当然也有处理得恰当赢得好名声的。特殊的情感!李谷一在医院惊闻前夫金铁霖死讯,以另一种身份悼念近日,著名音乐家金铁霖老师因病离世,享年83岁。金铁霖老师桃李满天下,很多知名歌手都是他的学生,其中就包括他的前妻李谷一。虽然是师生关系,但是金铁霖只比李谷一大4岁,对于李谷一,金2023年格莱美提名揭晓碧昂斯防弹少年团在列,附完整名单2023年格莱美奖的提名就在这里!唱片协会周二宣布了第65届格莱美奖的提名人选,该奖项颁奖盛会将于明年2月5日在洛杉矶的竞技场举行。今年提名次数最多的是碧昂斯,她的专辑文艺复兴帮助每一次秀恩爱都被全网劝离婚?这5对塑料夫妻,还能撑多久娱乐圈不仅有塑料姐妹,还有不少塑料夫妻。最新一季再见爱人里的明星夫妻宋宁峰和张婉婷,就是塑料夫妻的典型代表。他们的结合纯粹是因为孩子。相恋一个月,张婉婷怀孕了,两人迷迷糊糊走进了婚等着我寻人团团长李七月参加歌曲竞猜,她的一番话让人佩服第一次认识李七月,源于等着我这档节目。2018年10月23日,等着我第五季开播,原来的寻人团团长舒冬变成了爱心访问人,在舞台上和求助人倾情交流而接替舒冬担任寻人团团长这一职位的,就