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

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,这种加载方式属于隐式加载。

广东人煲汤有一手,苦瓜汤这样做,甘甜清润鲜香,不发苦不油腻广东人煲汤有一手,苦瓜汤这样做,甘甜清润鲜香,不发苦不油腻说到广东的饮食,大家应该不约而同地想到清淡,在广东基本上是不吃辣椒的,饮食也很讲究。在我这个山东人看来,实在是接受不了这样一片茶叶的旅程山谷披翠,绿波层层,白云舒卷。站在云南省普洱市的茶园里,除了心旷神怡,还多了几分怀古幽思这里曾是清代普洱府所在地,茶马古道通达八方,茶叶或茶马互市流转各地,或顺流而下到达南洋。形如甘肃中药材出口量价齐升拓海外市场至13个国家和地区2018年10月,甘肃民乐中药材博览会上的中药材。(资料图)杨艳敏摄中新网兰州6月17日电(丁思张艳)记者17日从兰州海关获悉,今年截至5月底,甘肃出口中药材583。1吨,货值34中国18岁天才接力狂飙!第4棒击败孙杨死敌外媒盛赞新宁泽涛北京时间6月24日,游泳世锦赛男子4200米自由泳接力结束争夺。美国以巨大的优势夺得金牌,澳大利亚和英国分别拿到银牌和铜牌。中国队进入决赛,但最终排名最后获得第8。虽然中国的整体成新能源汽车补贴取消,长城魏建军可能最头疼十多年时间,花费一千多亿,新能源汽车补贴政策,助力我国新能源汽车行业领先全球。而今,补贴政策即将功成身退,长城魏建军可能最着急和头疼。这到底是为什么呢?1。补贴政策功成身退?为了打千里马与伯乐缺一不可世联赛前八轮中国女排表现有感之一在结束了菲律宾奎松站的比赛之后,6月28日至7月3日,中国女排将在2022年世界女排联赛第三周转战保加利亚索菲亚,先后与巴西队波兰队多米尼加队和韩国队交锋。其实从中国女排前两站的战张碧晨女儿33周早产仅1。76kg,网友还不都是当妈的错原创孕事去年1月,张碧晨和华晨宇两人官宣我们有一个孩子。这个声明,瞬间引发热议,也把未婚生子的张碧晨推上了风口浪尖。在这一年多的时间里,张碧晨被各种质疑。因为怀孕期间行程不断,有网许嵩的新歌我听了,说说我的看法吧原本想着今天早上起来听的,不过昨晚最终还是熬到了12点,也就正好听了许嵩的新歌。晚上感受总归是比白昼理性一些,听完歌曲我也就立即有了本人的想法,不过与之前听许嵩新歌的时分觉得不同,王诗龄解封后首次露面,暴瘦20斤模样变化大,没了富态五官更立体不同的成长环境也会直接影响我们的穿衣审美,从小就被大牌簇拥的王诗龄,在衣着打扮上几乎没有太多风格可言,基本都是清一色的标签,各种大牌logo的叠加。随着体重的增长,她的穿衣空间也被45岁大s高调回归!即将复工再出风头,二婚太寒酸才穿8千的婚纱最近这两天因为大s和具俊晔的婚礼照和现场照片的曝光,让夫妻俩可是站稳了社交平台的热搜榜单,而不久前,大s又放大招,大s的经纪人表示她即将复出,可是就在她刚宣布二婚的时候,明确表示自大巴黎头号球星成队霸,直言清洗巴西人,巴萨尤文纽卡对其有意在宣布和姆巴佩进行续约以后,大巴黎这边就一直致力于对球队的阵容进行改造,但是由于球队赋予姆巴佩的权力实在过高,所以外界对于大巴黎也是望而却步。在此前的报道中曾经提到大巴黎现任主帅波
突发世界杯球队兴奋剂丑闻,与国足同组11有效,亚洲第5认罚聚焦中超CBA,独一无二球迷媒体点击右上角关注,不会后悔的虽然12强赛已经结束多日,但有关比赛问题却还在暴露,而且还发生在了世界杯球队身上,B组第一名沙特遭遇了兴奋剂丑闻,据知情媒世纪大翻盘,钟镇涛前妻从欠2。5亿到百亿带货女王,经历了什么?拜金女向来遭人口诛笔伐。从多年前站在综艺节目上,叫嚣着自己宁愿坐在宝马车里哭,也不愿意坐在自行车上笑的马诺,到影视剧里出现的樊胜美们,人人唾弃。但有一位港媒笔下的拜金妖女花钱不眨眼从抗日神剧到直播网红,片酬总被拖欠,还是愿意零片酬去演戏从范冰冰被罚8。8亿元开始,明星的收入再度刺激到了许多网友的敏感神经。2009年才出道的郑爽,因偷税漏税被罚2。99亿,2012出道的邓伦被罚1。06亿元。不断被爆出的明星收入问题莫小贝长大后,演偶像剧被嫌丑,如今娱乐圈真是颜值当道吗?近日,已经开拍2个多月,且一直倍受观众们期待的当代法治案情剧底线终于又发布了最新的一组剧照。因为集结了靳东成毅王劲松蔡文静王莎莎等一众实力派演员,加上导演又是内地名导刘国彤,所以自撞衫不可怕,谁丑谁尴尬,杨紫和沈月撞衫,你觉得谁更美?身在娱乐圈撞衫不可避免主要是谁丑谁尴尬观众的眼睛可是雪亮的看完图片,有没有同感,小猴子杨紫又仙又美,这件蕾丝印花裙配上她的空气刘海,简直是仙女本人有没有,还很显瘦显高呢!乍一看沈月蔡徐坤14岁演的电视剧,他23岁了还不播,观众女配傅艺伟要背锅之前和大家分享过王一博和陈钰琪有部主演的剧,2017年就已经杀青,但2022年还没播,让两家粉丝整整等了5年。而今天要分享的这部剧更久远,时隔年限更久,2012年就杀青的剧,202袁泉带女儿去机场,简单T恤显随性,网友女儿就该这样教育随着近几年重男轻女思想的转变,很多家庭对女儿的到来,也抱着无比欢愉的态度,甚至对女孩宠爱的程度远远超过男孩,因此,要出现女儿奴等称号。这种现象不仅出现在普通人家,在明星的家庭中出现2499起,小米6再度上榜,这旗舰成了小米一生之敌不知道何时起,小米的口碑开始变得褒贬不一,我想很大的原因就是在去年的MIUI12系列身上,毕竟曾经米粉朋友引以为豪的MIUI,却成了BUG齐飞的BUI米,我想哪些粉丝朋友们的心情是女孩父亲只要能证明这点,华为就得配合退款今天看到一个热门事件河北邢台市一9岁女孩从华为游戏中心下载了一款游戏,并往游戏里充值了八万多元,女孩父亲想找华为官方退款,奈何证据不足,退不了。我看了一下留言,网友们各抒己见有人认OCR通用验证码识别SDK免费开源版ddddocr推荐个通用验证码识别程序ddddocr,可自动识别各种各样的登录验证码图片,支持滑块识别。按照项目介绍ddddocr是由sml2h3开发的专为验证码厂商进行对自家新版本验证码难易强Linux简单使用vi编辑器vi很常用,这里记录一下简单的用法,以利于未来用到或忘记时快速查阅。vi的模式命令模式(commandmode)执行vi命令后默认进入命令模式。插入模式(insertmode)在命