• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > JVM教程之Java代码编译和执行的整个过程(二)

JVM教程之Java代码编译和执行的整个过程(二)

作者:cutesource 字体:[增加 减小] 来源:互联网 时间:2017-05-28

cutesource 通过本文主要向大家介绍了java jvm原理,java jvm是什么,java jvm调优,java虚拟机jvm下载,java jvm下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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平台中扩展功能的一些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已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。

类执行机制

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Java JVM原理与调优_动力节点Java学院整理
  • JVM教程之Java代码编译和执行的整个过程(二)
  • Java JVM虚拟机运行机制
  • Java JVM原理与调优_动力节点Java学院整理

相关文章

  • 2017-05-28详解context root修改无效web修改项目路径(eclipse)
  • 2017-05-28java导出大批量(百万以上)数据的excel文件
  • 2017-05-28Java BigDecimal详解_动力节点Java学院整理
  • 2017-05-28java中的 toString()方法实例代码
  • 2017-05-28java 基础教程之多线程详解及简单实例
  • 2017-05-28springboot集成spring cache缓存示例代码
  • 2017-05-28SpringBoot拦截器实现对404和500等错误的拦截
  • 2017-05-28Java中的super关键字_动力节点Java学院整理
  • 2017-05-28Spring Boot 添加MySQL数据库及JPA实例
  • 2017-05-28MyBatis+MySQL 返回插入的主键ID的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java中String.format的使用方法总结
    • Java去掉数字字符串开头的0三种方法(推荐)
    • Java实现监控多个线程状态的简单实例
    • Spring Boot实现动态更新任务的方法
    • SpringMVC中日期格式的转换
    • SWT(JFace)体验之ApplicationWindow
    • Spring MVC学习笔记之json格式的输入和输出
    • 浅析java中next与nextLine用法对比
    • Java中static的特点
    • 大括号{}的意义与静态代码块与构造函数的加载关系

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有