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