java程序代碼需要編譯后才能在虛擬機(jī)中運(yùn)行,并且還要保證java代碼的正確性才能順利進(jìn)行java代碼運(yùn)行,那java編譯方式怎么查?接下來(lái)我們就來(lái)給大家講解一下java編譯方式查詢方式!
java編譯方式通過(guò)編譯文件可以查看。
Java有幾種編譯方式?
1.前端編譯
把Java源碼文件(.java)編譯成Class文件(.class)的過(guò)程; 也即把滿足Java語(yǔ)言規(guī)范的程序轉(zhuǎn)化為滿足JVM規(guī)范所要求格式的功能;
優(yōu)點(diǎn):
這階段的優(yōu)化是指程序編碼方面的;
許多Java語(yǔ)法新特性("語(yǔ)法糖":泛型、內(nèi)部類(lèi)等等),是靠前端編譯器實(shí)現(xiàn)的,而不是依賴虛擬機(jī);
編譯成的Class文件可以直接給JVM解釋器解釋執(zhí)行,省去編譯時(shí)間,加快啟動(dòng)速度;
缺點(diǎn):
對(duì)代碼運(yùn)行效率幾乎沒(méi)有任何優(yōu)化措施;
解釋執(zhí)行效率較低,所以需要結(jié)合下面的JIT編譯;
前端編譯器:Oracle javac、Eclipse JDT中的增量式編譯器(ECJ)等;
2、后端編譯/即時(shí)(JIT)編譯
通過(guò)Java虛擬機(jī)(JVM)內(nèi)置的即時(shí)編譯器(Just In Time Compiler,JIT編譯器);在運(yùn)行時(shí)把Class文件字節(jié)碼編譯成本地機(jī)器碼的過(guò)程;
優(yōu)點(diǎn):
通過(guò)在運(yùn)行時(shí)收集監(jiān)控信息,把"熱點(diǎn)代碼"(Hot Spot Code)編譯成與本地平臺(tái)相關(guān)的機(jī)器碼,并進(jìn)行各種層次的優(yōu)化;
可以大大提高執(zhí)行效率;
缺點(diǎn):
收集監(jiān)控信息影響程序運(yùn)行;
編譯過(guò)程占用程序運(yùn)行時(shí)間(如使得啟動(dòng)速度變慢);
編譯機(jī)器碼占用內(nèi)存;
JIT編譯器:HotSpot虛擬機(jī)的C1、C2編譯器等;
另外,JIT編譯速度及編譯結(jié)果的優(yōu)劣,是衡量一個(gè)JVM性能的很重要指標(biāo);
所以對(duì)程序運(yùn)行性能優(yōu)化集中到這個(gè)階段;
也就是說(shuō)可以對(duì)這個(gè)階段進(jìn)行JVM調(diào)優(yōu);
3、靜態(tài)提前編譯(Ahead Of Time,AOT編譯)
程序運(yùn)行前,直接把Java源碼文件(.java)編譯成本地機(jī)器碼的過(guò)程;
優(yōu)點(diǎn):
編譯不占用運(yùn)行時(shí)間,可以做一些較耗時(shí)的優(yōu)化,并可加快程序啟動(dòng);
把編譯的本地機(jī)器碼保存磁盤(pán),不占用內(nèi)存,并可多次使用;
缺點(diǎn):
因?yàn)镴ava語(yǔ)言的動(dòng)態(tài)性(如反射)帶來(lái)了額外的復(fù)雜性,影響了靜態(tài)編譯代碼的質(zhì)量;
一般靜態(tài)編譯不如JIT編譯的質(zhì)量,這種方式用得比較少;
靜態(tài)提前編譯器(AOT編譯器):JAOTC、GCJ、Excelsior JET、ART (Android Runtime)等;
Java編譯方式就是前端編譯、即時(shí)編譯以及靜態(tài)提前編譯,我們需要了解其編譯方式的優(yōu)點(diǎn)以及缺點(diǎn),然后再根據(jù)實(shí)際情況去選擇合適的編譯方式!最后大家如果想要了解更多初識(shí)java知識(shí),敬請(qǐng)關(guān)注賦能網(wǎng)。
本文鏈接:
本文章“java編譯方式怎么查?Java有幾種編譯方式?”已幫助 97 人
免責(zé)聲明:本信息由用戶發(fā)布,本站不承擔(dān)本信息引起的任何交易及知識(shí)產(chǎn)權(quán)侵權(quán)的法律責(zé)任!
本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓(xùn)機(jī)構(gòu)》培訓(xùn)課程》學(xué)習(xí)資訊》課程優(yōu)惠》課程開(kāi)班》學(xué)校地址等機(jī)構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細(xì)解答:
咨詢熱線:4008-569-579