Java 程序的運(yùn)行機(jī)制
編譯型語言:如C、C++荠诬,使用專門的編譯器们豌,針對(duì)特性的平臺(tái),將高級(jí)語言一次性翻譯為該平臺(tái)硬件執(zhí)行的機(jī)器碼浅妆,編譯生成的可執(zhí)行文件望迎,可以脫離開發(fā)環(huán)境,在特定平臺(tái)獨(dú)立運(yùn)行凌外。通過鏈接多個(gè)編譯好的目標(biāo)代碼辩尊,組合成最終的可執(zhí)行文件,實(shí)現(xiàn)低層次的代碼服用康辑。
解釋型語言:如Python摄欲,Ruby轿亮,使用專門的解釋器對(duì)源程序逐行解釋成特定平臺(tái)的機(jī)器碼并立即執(zhí)行⌒厍剑可以認(rèn)為每次執(zhí)行時(shí)都需要進(jìn)行過一次編譯我注,運(yùn)行效率較低,不能脫離解釋器獨(dú)立運(yùn)行迟隅,容易跨平臺(tái)但骨,只需要提供平臺(tái)所需的解釋器即可。
JAVAC編譯 JVM解釋運(yùn)行
所有平臺(tái)上的JVM向JAVAC提供相同的編程接口,JVM是Java 一次編譯屈扎,到處執(zhí)行的關(guān)鍵轉(zhuǎn)換器此蜈。
垃圾回收機(jī)制
java的堆內(nèi)存是一個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū)抠璃,用來保存類的實(shí)例塔沃,java虛擬機(jī)的堆內(nèi)存中存儲(chǔ)著正在運(yùn)行的應(yīng)用程序所建立的所有對(duì)象。這些對(duì)象不需要手動(dòng)釋放单起,JVM有一套垃圾回收算法抱怔,可以自動(dòng)釋放不再被程序引用的對(duì)象,可以通過System.gc() 來建議系統(tǒng)進(jìn)行垃圾回收馏臭,這種方法只是建議野蝇,不能夠精確控制GC。