《Java虚拟机精讲》读书笔记-第二章 字节码的编译原理

jvm同样可以执行其它语言的代码,如ruby,js只要他们编译成符合规范的字节码

相关信息可以百度jruby等

而java本身编译字节码的工具也就是我们都知道的javac.exe

然而我们在eclipse中的编译工作并不是读取jdk执行javac实现的,而是使用了eclipse自带的ECJ编译器实现的,javac采用的是全量编译,而ecj使用的是增量编译,tomcat也使用ecj编译jsp页面

编译分为4部分

  1. 词法分析

    将源码中的关键字和标识符等内容转换为符合java语法规范的token序列,然后按照指定的顺序规则进行匹配校验(转换并校验关键字和标识符是否正确)

2.语法分析

将token序列整合为一个语法树,如try后面要接catch(生成语法树并校验语法是否正确)

3.语义分析

扩充语法树

4.生成字节码(后续详细讲解)

如何下载部署javac编译器源码

download.java.net/openjdk/jdk8

新建java项目,并将下载的压缩文件中的/langtools/src/share/classes文件夹下的文件导入或copy到代码区,注意设置你的eclipse编译器版本为1.5以上,同时jre尽量使用eclipse自带的

时间: 2024-09-29 20:07:31

《Java虚拟机精讲》读书笔记-第二章 字节码的编译原理的相关文章

《深入理解Java虚拟机》读书笔记---第二章 Java内存区域与内存溢出异常

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来.这一章就是给大家介绍Java虚拟机内存的各个区域,讲解这些区域的作用,服务对象以及其中可能产生的问题. 1.运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域. 1.1程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型中里,字

《Java并发变成实践》读书笔记---第二章 线程安全性

什么是线程安全性 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的(Shared)和可变的(Mutable)状态的访问.从非正式的意义上来说,对象的状态是指存储在状态变量(例如实例或静态域)中的数据."共享"意味着变量可以由多个线程同时访问,而"可变"则意味着变量的值在其生命周期内可以发生变化.所以编写线程安全的代码更侧重于如何防止在数据上发生不受控的并发访问. 如果当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误

《Java虚拟机精讲》读书笔记-第一章Java体系结构

本章主要讲解了java体系的结构,包括四个方面:java编程语言,字节码,Java API和java虚拟机四部分 并简单介绍了以上四部分,同时对java中的一些新特性进行了介绍,由于我阅读本书的时候java8已经发布,因此其中的一些说是要在后续版本实现的功能已经实现了,如lambda表达式,函数式编程等,最后介绍了OpenJdk的使用和编译 下面对一些看书之前不了解的概念进行学习 lambda表达式 什么是λ表达式 λ表达式本质上是一个匿名方法.让我们来看下面这个例子: public int a

[Effective Java 读书笔记] 第二章 创建和销毁对象 第一条

第二章  创建和销毁对象 第一条 使用静态工厂方法替代构造器,原因: 静态工厂方法可以有不同的名字,也就是说,构造器只能通过参数的不同来区分不同的目的,静态工厂在名字上就能表达不同的目的 静态工厂方法不用每次调用的时候都创建新的对象(其实是因为它是static的,所以只能用static的,所以是一早就创建了,不需要重复创建吧..),比如书中 Boolean.valueOf(boolean) 1 public static final Boolean TRUE = new Boolean(true

In-memory Computing with SAP HANA读书笔记 - 第二章:SAP HANA overview

本文为In-memory Computing with SAP HANA on Lenovo X6 Systems第二章SAP HANA overview的读书笔记. 本章最重要的部分是SAP HANA architecture SAP HANA overview SAP HANA数据库是结合了行式,列式和对象的内存数据库,可以充分利用硬件的并行处理能力. SAP HANA appliance是一体化的软硬件设施,核心还是SAP HANA. SAP HANA architecture HANA的

读书笔记 第二章

本章内容主要讲到了如何搭建安卓环境,分为五个步骤来完成Android开发环境的部署. 第一步:安装JDK: 第二步:配置Windows上JDK的变量环境 : 第三步: 下载安装Eclipse :第四步:下载安装Android SDK :第五步:为Eclipse安装ADT插件. 关于JDK,他所包含的基本工具主要有:javac:Java编译器,将源代码转成字节码:jar:打包工具,将相关的类文件打包成一个文件:javadoc:文档生成器,从源码注释中提取文档:jdb:debugger,调试查错工具

Android深度探索读书笔记 第二章

第二章介绍的是搭建android底层的开发环境 ,主要包括android应用程序开发环境.android NDK开发环境和交叉编译环境的搭建.首先介绍的是开发测试和调试Linux驱动.HAl程序需要的工具:JDK6或以上版本:Eclipse3.4或以上版本:ADT:CDT:androidSDK:Android NDk:交叉编译环境:Linux内核源代码:android源代码:用于调试的串口工具 minicom.接着介绍的是JDK的安装:首先从官方网站(http://www.oracle.com/

读书笔记第二章

第二章Linux的驱动程序需要android应用程序以及android NDK程序来测试Linux驱动.因此,不信需要配置Linux驱动开发环境,还需要配置开发android应用程序以及android Ndk程序的开发环境.需要的工具:jdk6或以上版本.eclipse 3.4或以上版本.ADT.CDT.android SDK.android NDk.交叉编译环境.linux内核源代码.Android源代码.用于调试开发板的串口工具:minicom.搭建android应用程序开发环境:安装and

[Effective Java 读书笔记] 第二章 创建和销毁对象 第六-?条

第六条 消除过期引用 JAVA中依然会有 memory leak的,比如一个栈先增长再收缩,那么从栈中弹出的对象是不会被当做垃圾回收的,即时使用栈的程序不再引用这些对象.这是因为栈的内部维护着对这些对象的过期引用(永远也不会被解除的引用),需要显示的将这些对象清空(置为null),告诉垃圾回收器回收这些对象. 比如Stack类的实现里,pop()函数最后会有对element置null的操作: public synchronized E pop() { E obj; int len = size(