java在编译期和运行期都作了什么

Java对象内存存储,引用传递,值传递详细图解java

java对象在内存中的分配数据结构

编译过程:jvm

编译器把一种语言规范转化为另外一种语言规范的这个过程须要哪些步骤?回答这个问题须要参照《编译原理》,总结过程以下:源码分析

1)词法分析:读取源代码,一个字节一个字节的读进来,找出这些词法中咱们定义的语言关键词如:ifelse、while等,识别哪些if是合法的哪些是不合法的。这个步骤就是词法分析过程。 词法分析的结果:就是从源代码中找出了一些规范化的token流,就像人类语言中,给你一句话你要分辨出哪些是一个词语,哪些是标点符号,哪些是动词,哪些是名词。 2)语法分析:就是对词法分析中获得的token流进行语法分析,这一步就是检查这些关键词组合在一块儿是否是符合Java语言规范。如if的后面是否是紧跟着一个布尔型判断表达式。 语法分析的结果:就是造成一个符合Java语言规定的抽象语法树,抽象语法树是一个结构化的语法表达形式,它的做用是把语言的主要词法用一个结构化的形式组织在一块儿。
这棵语法树能够被后面按照新的规则再从新组织。
3)语义分析:语法分析完成以后也就不存在语法问题了,语义分析的主要工做就是把一些难懂的,复杂的语法转化成更简单的语法。
就如难懂的文言文转化为你们都懂的百话文,或者是注释一下一些不懂的成语。 语义分析结果:就是将复杂的语法转化为简单的语法,对应到Java就是将foreach转化为for循环,还有一些注释等。
最后生成一棵抽象的语法树,这棵语法树也就更接近目标语言的语法规则。
4)字节码生成:将会根据通过注释的抽象语法树生成字节码,也就是将一个数据结构转化为另一个数据结构。
就像将全部的中文词语翻译成英文单词后按照英文语法组装文英文语句。代码生成器的结果就是生成符合java虚拟机规范的字节码。

总结就是:学习

词法分析就是将关键词组织成token流即检查源码中的的关键词是否真确并组织成token流(标记流), 而语法分析就是检查源码是否符合java语法规范并将词组成语句。 语义分析就是简化复杂的添加缺乏的,检查变量类型是否合法。 代码生成器就是遍历这棵树生成符合JVM规范的代码。

 

java之jvm学习笔记十三(jvm基本结构)系列ui

JVM的相关知识整理和学习spa

 

深刻理解Java类加载器(1):Java类加载原理解析

深刻理解Java类加载器(2):线程上下文类加载器

Java 代码 编译和执行过程.net

Jvm(jdk8)源码分析1-java命令启动流程详解线程

Java中堆内存和栈内存详解翻译

Java中编译期、运行期、堆内存和栈内存详解

Java Jvm运行机制原理

相关文章
相关标签/搜索