java编译机制_java的编译机制
我們通常寫的文件都是java文件,最后要在JVM上運(yùn)行則需要將java文件編譯成class(二進(jìn)制文件).
各廠商在實(shí)現(xiàn)JDK時(shí)通常會(huì)符合java語(yǔ)言規(guī)范的源碼編譯為class文件的編譯器.編譯器的好壞很大程度上決定了最后程序在機(jī)器上執(zhí)行效率.通常使用Sun JDK(javac).
javac將java源碼編譯成class文件有以下主要的三個(gè)步驟:
分析和輸入到符號(hào)表(parse and enter)
parse過程為詞法分析和語(yǔ)法分析.詞法分析主要是將字符串轉(zhuǎn)成token序列;語(yǔ)法分析是根據(jù)語(yǔ)法將token生成抽象語(yǔ)法樹.
enter是將符號(hào)輸入到符號(hào)表.通常包括確定類的超類型和接口、根據(jù)需要添加默認(rèn)構(gòu)造器、將類中出現(xiàn)的符號(hào)輸入類自身的符號(hào)表中等。
注解處理(annotation processing)
主要處理用戶自定義的注解,我們通常會(huì)根據(jù)注解來生成一代碼或做一些特殊的檢查。而在編譯時(shí)就會(huì)生成相關(guān)代碼。然后再做parse and enter操作。
語(yǔ)義分析和生成class文件(analyse and generate)
analyse是基于抽象語(yǔ)法樹進(jìn)行一系列的語(yǔ)義分析,包括將語(yǔ)法樹中的名字、表達(dá)式等元素與變量、方法、類型等聯(lián)系到一起;檢查變量前是否申明;推導(dǎo)泛型方法的類型參數(shù);檢查類型匹配;進(jìn)行常量折疊;檢查所有語(yǔ)句都可到達(dá);檢查所有exception都被捕獲或拋出;檢查變量的確定性賦值;將泛型轉(zhuǎn)為java;精減語(yǔ)法結(jié)構(gòu)等;
在完成了語(yǔ)義分析后,開始生成class文件:首先將實(shí)例成員初始化器收集到構(gòu)造器中,將靜態(tài)成員初始化器收集為();接著將抽象語(yǔ)法樹生成字節(jié)碼,采用的方法為后序遍歷語(yǔ)法樹,并進(jìn)行最后的少量代碼轉(zhuǎn)換(如將string轉(zhuǎn)變?yōu)閟tringBuffer操作);最后從符號(hào)表生成class文件。
class文件中并不僅僅存放了字節(jié)碼,還存放了很多輔助JVM來執(zhí)行class的附加信息。
原文:http://881206524.blog.51cto.com/10315134/1901182
總結(jié)
以上是生活随笔為你收集整理的java编译机制_java的编译机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql3.5.2 下载_mybati
- 下一篇: 远程桌面与本计算机共享文件,如何开启远程