- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java 代码编译和执行的整个过程
Java 代码编译和执⾏的整个过程
Java 代码编译和执⾏的整个过程
Java 代码编译是由 Java 源码编译器来完成,流程图如下所⽰:
Java 字节码的执⾏是由 JVM 执⾏引擎来完成,流程图如下所⽰:
Java 代码编译和执⾏的整个过程 含了以下三个重要的机制:
Java 源码编译机制
类加载机制
类执⾏机制
Java 源码编译机制
Java 源码编译由以下三个过程组成:
分析和输⼊到符号表
注解处理
语义分析和⽣成 class ⽂件
流程图如下所⽰:
最后⽣成的 class ⽂件由以下部分组成:
结构信息。 括 class ⽂件格式版本号及各部分的数量与⼤⼩的信息。
元数据。对应于 Java 源码中声明与常量的信息。 含类/继承的超类/实现的接
⼜的声明信息、域与⽅法声明信息和常量池。
⽅法信息。对应 Java 源码中语句和表达式对应的信息。 含字节码、异常处理
器表、求值栈与局部变量区⼤⼩、求值栈的类型记录、调试符号信息。
类加载机制
JVM 的类加载是通过 ClassLoader 及其⼦类来完成的,类的层次关系和加载顺序可以
由下图来描述:
1)Bootstrap ClassLoader
负责加载$JAVA_HOME中jre/lib/rt.jar⾥所有的 class ,由 C++ 实现,不是
ClassLoader ⼦类。
2 )Extension ClassLoader
负责加载Java平台中扩展功能的⼀些 j ar , 括$JAVA_HOME中jre/lib/*.jar
或-Djava.ext.dirs指定⽬录下的 j ar 。
3 )App ClassLoader
负责记载 classpath 中指定的 j ar 及⽬录中 class 。
4 )Custom ClassLoader
属于应⽤程序根据⾃⾝需要⾃定义的 ClassLoader ,如 Tomcat 、jboss 都会根据 J2EE
规范⾃⾏实现 ClassLoader 。
加载过程中会先检查类是否被已加载,检查顺序是⾃底向上,从 Custom ClassLoader
到 BootStrap ClassLoader 逐层检查,只要某个 Classloader 已加载就视为已加载此类,
保证此类只所有 ClassLoade r加载⼀次。⽽加载的顺序是⾃顶向下,也就是由上层来
逐层尝试加载此类。
类执⾏机制
JVM 是基于栈的体系结构来执⾏ class 字节码的。线程创建后,都会产⽣程序计数器
(PC )和栈 (Stack ),程序计数器存放下⼀条要执⾏的指令在⽅法内的偏移量,栈
中存放⼀个个栈帧,每个栈帧对应着每个⽅法的每次调⽤,⽽栈帧又是有局部变量区
和操作数栈两部分组成,局部变量区⽤于存放⽅法中的局部变量和参数,操作数栈中
⽤于存放⽅法执⾏过程中产⽣的中间结果。栈的结构如下图所⽰:
W3Cschool ( )最⼤的技术知识分享与学习 台
此篇内容来⾃于 ⽹站⽤户上传并发布。
文档评论(0)