60.Java 代码编译和执行的整个过程

60.Java 代码编译和执行的整个过程

Java 代码编译是由 Java 源码编译器来完成,流程图如下所示:

Java字节码的执行是由 JVM 执行引擎来完成,流程图如下所示:

Java 代码编译和执行的整个过程包含了以下三个重要的机制:
Java 源码编译机制
类加载机制
类执行机制

Java 源码编译机制
Java 源码编译由以下三个过程组成:
分析和输入到符号表
注解处理
语义分析和生成 class 文件

流程图如下所示:

最后生成的 class 文件由以下部分组成:
结构信息。包括 class 文件格式版本号及各部分的数量与大小的信息。
元数据。对应于 Java 源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池。
方法信息。对应 Java 源码中语句和表达式对应的信息。包含字节码、异常处理器表、求值栈与局部变量区大小、求值栈的类型记录、调试符号信息。

类加载机制

JVM 的类加载是通过 ClassLoader 及其子类来完成的,类的层次关系和加载顺序可以由下图来描述:

1)Bootstrap ClassLoader
负责加载JAVAHOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类。2)ExtensionClassLoader负责加载Java平台中扩展功能的一些jar包,包括JAVA_HOME中jre/lib/rt.jar里所有的 class,由 C++ 实现,不是 ClassLoader 子类。 2)Extension ClassLoader 负责加载Java平台中扩展功能的一些 jar 包,包括JAVAH​OME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类。2)ExtensionClassLoader负责加载Java平台中扩展功能的一些jar包,包括JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的 jar 包。
3)App ClassLoader
负责记载 classpath 中指定的 jar 包及目录中 class。
4)Custom ClassLoader
属于应用程序根据自身需要自定义的 ClassLoader,如 Tomcat、jboss 都会根据 J2EE 规范自行实现ClassLoader。
加载过程中会先检查类是否被已加载,检查顺序是自底向上,从 Custom ClassLoader 到 BootStrap ClassLoader 逐层检查,只要某个Classloader已加载就视为已加载此类,保证此类只所有 ClassLoade r加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。

类执行机制

JVM 是基于栈的体系结构来执行 class 字节码的。线程创建后,都会产生程序计数器(PC)和栈(Stack),程序计数器存放下一条要执行的指令在方法内的偏移量,栈中存放一个个栈帧,每个栈帧对应着每个方法的每次调用,而栈帧又是有局部变量区和操作数栈两部分组成,局部变量区用于存放方法中的局部变量和参数,操作数栈中用于存放方法执行过程中产生的中间结果。栈的结构如下图所示:

60.Java 代码编译和执行的整个过程相关推荐

  1. JVM学习笔记(二)------Java代码编译和执行的整个过程

    Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: ● Java ...

  2. JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)

    转载注明出处: http://blog.csdn.net/cutesource/article/details/5904501 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.e ...

  3. Java 代码编译和执行的整个过程

    一.简述 Java代码编译和执行的整个过程包含了三个重要的机制: ①Java 源码编译机制: ②类加载机制: ③类执行机制 二.Java 源码编译机制 Java 代码编译是由 Javac 编译器来完成 ...

  4. java代码编译过程_Java代码编译和执行的整个过程

    一.简述 Java代码编译和执行的整个过程包含了三个重要的机制:①Java源码编译机制:②类加载机制:③类执行机制 二.Java源码编译机制 Java代码编译是由Javac编译器来完成,流程如图: J ...

  5. 执行引擎的工作过程、Java代码编译和执行的过程、解释器、JIT编译器

    执行引擎概述 执行引擎是Java虛拟机核心的组成部分之一. "虚拟机"是-一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接 ...

  6. Java在编译到执行过程的编码问题

    一.两个字符编码的参数 javac和java是JDK自带的工具,其中javac是编译工具,java工具启动Java虚拟机并执行java程序.这两个工具都带有设置字符编码的选项.本文讨论字符编码选项的使 ...

  7. idea2020shezhi代码检查级别_结合 CPU 理解一行 Java 代码是怎么执行的

    根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器.控制器.存储设备,以及输入输出设备,如下图所示. 我们先来分析 CPU 的工作原理,现代 CPU 芯片中大都集成了,控制单元,运算单 ...

  8. Java笔记——Java代码块的执行顺序

    Java代码块的执行顺序 Java程序中代码块的执行顺序对于学习Java的人来说是必不可少需要掌握的. 代码块 在Java中,使用{}括起来的代码被称为代码块. 根据其位置和声明的不同,可以分为: 局 ...

  9. Java 版本、语言规范、API、JDK、IDE、Java 源程序编译、执行原理(跨平台性根本原因)、特殊字符用法、8 大数据类型小结

    文章目录 前言 一.三大版本类型 二.Java 语言规范 三.应用程序接口(API) 四.Java 开发工具包(JDK) 五.集成开发环境(IDE) 六.Java 运行环境(JRE) 七.Java 源 ...

最新文章

  1. 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
  2. 在Excel单元格中使用下拉框
  3. 我的第一个appium+Python自动化实例
  4. MySQL配置主从同步过程记录
  5. k8s ConfigMap使用示例:以volume或变量形式挂载到pod中
  6. C#基础-应用程序域
  7. 最便宜的鸿蒙手机,今年不再推出鸿蒙手机,却让老旗舰占据优势,降价后变真香...
  8. php 显示html文件后缀,[求助]此jQuery在html后缀文件可用,在php后缀文件就用不了!...
  9. Linux学习笔记018---Centos7 下安装JDK1.8
  10. 新手如何入门PyTorch
  11. SnackbarUtils:一行代码搞定Snackbar
  12. voip语音中转服务器,基于VoIP的语音应用服务器的设计与实现
  13. MySQL+Navicat安装教程
  14. 如何选择APP的推广渠道?
  15. c# chart 各个属性_c# Chart设置样式
  16. Collapse search results
  17. linux使用df命令
  18. 【VBScript】MsgBox()函数
  19. 1代iPhone 3.0 OS 刷机+破解+使用技巧
  20. 【数据分析】用户价值分析

热门文章

  1. php mysql生日提醒_基于AIML的PHP聊天机器人
  2. python中的全局变量和局部变量
  3. MongoDB数据库(3.mongodb数据库的高级查询)
  4. 深度学习-机器学习(5.1支持向量机)
  5. LeetCode两数之和 56 python
  6. 【Python】Time库的使用(含实例)
  7. Java8 Lambda 表达式
  8. VTK:提取可见细胞用法实战
  9. boost::multi_array相关的测试程序
  10. boost::mpl模块实现lower_bound相关的测试程序