澳门新葡萄京官网注册 7

澳门新葡萄京官网注册Java代码编译和执行的整个过程

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

转自:

Java for Android的根底知识

澳门新葡萄京官网注册 1

版权申明:本文为博主原创作品,未经博主允许不得转发。

一.JVM的结构

Java字节码的实践是由JVM实施引擎来产生,流程图如下所示:

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

每个JVM都包括:

澳门新葡萄京官网注册 2

澳门新葡萄京官网注册 3

1.类加载子系统:装载具备相符名称的类照旧接口。

Java代码编写翻译和奉行的整整经过包括了以下三个关键的编写制定:

Java字节码的实行是由JVM实践引擎来产生,流程图如下所示:

2.内部存款和储蓄器空间:方法区,Java堆,Java栈,本地点法区。

  • Java源码编写翻译机制
  • 类加运载飞机制
  • 类试行机制

澳门新葡萄京官网注册 4

3.废品采撷器(GC)。

Java源码编写翻译机制

Java 源码编写翻译由以下四个进度组成:

  • 深入分析和输入到符号表
  • 讲授管理
  • 语义剖析和生成class文件

流程图如下所示:

澳门新葡萄京官网注册 5

末尾生成的class文件由以下部分构成:

  • 布局音讯。包含class文件格式版本号及各部分的多寡与大小的音讯
  • 元数据。对应于Java源码中宣称与常量的音信。包罗类/世袭的超类/实现的接口的申明消息、域与艺术声明音信和常量池
  • 方法音信。对应Java源码中说话和表明式对应的信息。富含字节码、格外微处理器表、求值栈与部分变量区大小、求值栈的品种记录、调节和测量检验符号消息

 

4.流速计以至存放器。

类加运载飞机制

JVM的类加载是通过ClassLoader及其子类来实现的,类的层系关系和加载顺序能够由下图来描述:

澳门新葡萄京官网注册 6

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加载三回。而加载的顺序是自顶向下,也正是由上层来逐层尝试加载此类。

Java代码编写翻译和举行的全体进程包涵了以下八个首要的建制:

5.推行引擎:担负实行包括在已装载的类或接口的一声令下。

类奉行机制

JVM是基于栈的系统布局来实行class字节码的。线程创立后,都会发生程序计数器(PC)和栈(Stack),程序流量计存放下一条要施行的授命在艺术内的偏移量,栈中寄存三个个栈帧,每种栈帧对应着各种方法的每一回调用,而栈帧又是有部分变量区和操作数栈两有些组成,局地变量区用于贮存方法中的局地变量和参数,操作数栈中用于贮存方法试行进程中产生的中等结果。栈的构造如下图所示:

澳门新葡萄京官网注册 7

  • Java源码编写翻译机制
  • 类加载机制
  • 类实行机制

6.当地方法接口和本土方法库。

Java源码编写翻译机制

二.JVM编写翻译和实践进程

Java 源码编写翻译由以下四个经过组成:

简轻便单流程在前篇已经介绍过来,这里最首要注意这几个进程中的八个至关心尊敬要体制:源代码编写翻译机制,类加运载飞机制,类推行机制。

  • 剖析和输入到符号表
  • 讲授处理
  • 语义分析和生成class文件

1.源代码的编写翻译机制:

流程图如下所示:

(1)剖判和输入符号表

澳门新葡萄京官网注册 8

(2)表明管理

最后生成的class文件由以下一些组成:

(3)语义深入分析和生成class文件

  • 布局新闻。包蕴class文件格式版本号及各部分的数额与大小的新闻
  • 元数据。对应于Java源码中扬言与常量的音信。富含类/世袭的超类/完毕的接口的扬言音讯、域与方法阐明新闻和常量池
  • 方法音信。对应Java源码中言语和表明式对应的消息。包涵字节码、格外微机表、求值栈与一些变量区大小、求值栈的品类记录、调节和测量检验符号消息

末段生存的class文件由以下一些组成:

类加运载飞机制

(1)布局音讯:富含class文件格式,版本号以致各类部分的多寡大小的新闻。

JVM的类加载是通过ClassLoader及其子类来产生的,类的层系关系和加载顺序能够由下图来陈诉:

(2)元数据:对应Java源码中宣称和常量的音信。蕴含类/世襲的超类/实现的接口的宣示音信,域与艺术表明消息和常量池。

澳门新葡萄京官网注册 9

(3)方法音讯:对应源码中说话和表明式。包括字节码,非常处理表,求值栈与部分变量区大小,求值栈类型记录,调节和测量检验符号新闻。

1)Bootstrap ClassLoader

2.类加运载飞机制

顶住加载$JAVA_HOME中jre/lib/rt.jar里全体的class,由C++达成,不是ClassLoader子类

JVM的类加载是经过ClassLoader以至其子类来造成的。

2)Extension ClassLoader

(1)Bootstrap
ClassLoader:负担加载情况变量中JAVA_HOME中jre/lib/rt.jar里全数的Class,由C++实现,不是ClassLoader子类。

担负加载java平高雄扩展功用的一对jar包,富含$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs钦赐目录下的jar包

(2)Extension
ClassLoader:担负加载Java平台扩展功用的一部分jar包,满含JAVA_HOME中jre/lib/*.jar或然-Djava.ext.dirs内定目录下的jar包。

3)App ClassLoader

(3)App
ClassLoader:担负加载Classpath中钦点的jar包以至目录中的class文件。

顶住记载classpath中钦点的jar包及目录中class

(4)Custom
Classloader:归属应用程序根据笔者须求自定义的ClassLoader,比如tomcat、jboss都会基于j2ee标准活动完毕ClassLoader。

4)Custom ClassLoader

加载进度会检查类是不是早就被加载,检查种种从CustomClassLoader到BootStrapClassLoader逐层检查,只要某些ClassLoader已加载则视为加载。而加载顺序与反省各种相反。

归属应用程序依据自个儿须求自定义的ClassLoader,如tomcat、jboss都会依附j2ee规范活动完结ClassLoader

3.类实行机制

加载进度中会先检查类是不是被已加载,检查种种是自底向上,从Custom
ClassLoader到BootStrap
ClassLoader逐层检查,只要有些classloader已加载纵然得已加载此类,保障此类只具有ClassLoader加载二遍。而加载的次第是自顶向下,也正是由上层来逐层尝试加载此类。

JVM是基于旅舍的设想机。JVM为每一个新成立的线程都分配一个储藏室。

类实践机制

一个Java程序的运转正是经过储藏室的操作来成功的。仓库以帧为单位保存线程的场合。JVM只对库房举行二种操作:以帧为单位的压栈和出栈。

JVM是依靠栈的类别布局来进行class字节码的。线程成立后,都会产生程序计数器(PC)和栈(Stack),程序流速计贮存下一条要施行的一声令下在艺术内的偏移量,栈中存放叁个个栈帧,种种栈帧对应着各样方法的每便调用,而栈帧又是有部分变量区和操作数栈两部分构成,局地变量区用于贮存方法中的局部变量和参数,操作数栈中用于存放方法奉行进程中发生的中间结果。栈的布局如下图所示:

JVM实施class字节码,创造线程后,都会发出程序流速计(PC)和栈(stack),计数器存放下一条要实施的指令在方式内的偏移量,栈中存放多个个帧栈,各样帧栈对应每一个方法的历次调用,而帧栈又由一些变量区和操作数栈两有的构成,局地变量区用于存放方法中的局地变量和参数,操作数栈中存放实践进程中产生的中游结果。

澳门新葡萄京官网注册 10

发表评论

电子邮件地址不会被公开。 必填项已用*标注