JAVA的核心機(jī)制有兩個(gè):跨平臺機(jī)制(JAVA虛擬機(jī)),垃圾回收機(jī)制
跨平臺機(jī)制實(shí)現(xiàn)了:一次編譯,到處運(yùn)行
?。ㄅcC語言的跨平臺區(qū)別在于:C語言是多次編譯多次運(yùn)行,
而這里所指的跨平臺是指編譯后的文件跨平臺)
垃圾回收機(jī)制實(shí)現(xiàn)了:自動(dòng)回收內(nèi)存,即無需程序員手動(dòng)內(nèi)存回收,避免忘記回收,造成內(nèi)存泄漏
JAVA跨平臺原理
在JAVA中,執(zhí)行一段寫好的代碼會(huì)經(jīng)過編譯和解釋兩個(gè)過程:
編譯 Compile:把整個(gè)程序源代碼翻譯成另外一種代碼,然后等待被執(zhí)行,發(fā)生在運(yùn)行之前,產(chǎn)物是「另一份代碼」。
解釋 Interpret:把程序源代碼一行一行的讀懂然后執(zhí)行,發(fā)生在運(yùn)行時(shí),產(chǎn)物是「運(yùn)行結(jié)果」。
①編譯:通過編譯器將.java文件(源文件)編譯成.class字節(jié)碼文件(二進(jìn)制文件),
編譯器即javac.exe,實(shí)際上也是運(yùn)行其背后的代碼
②解釋(執(zhí)行):通過解釋器將.class文件轉(zhuǎn)換為對應(yīng)操作系統(tǒng)可以識別的執(zhí)行文件格式,
即當(dāng)前平臺認(rèn)識的機(jī)器碼然后執(zhí)行,解釋器即java.exe。
注:表面上調(diào)用的是java.exe命令,實(shí)際上起作用的是虛擬機(jī)。
底層動(dòng)態(tài)調(diào)用虛擬機(jī)(JVM程序),
JVM再將.class字節(jié)碼文件解釋為當(dāng)前平臺認(rèn)識的機(jī)器碼并執(zhí)行。
虛擬機(jī)和解釋器的關(guān)系:解釋器是虛擬機(jī)的一個(gè)重要的組成部分。
通過不同的JVM,JAVA代碼實(shí)現(xiàn)了在不同操作系統(tǒng)上的運(yùn)行,即跨平臺機(jī)制。
JAVA的跨平臺是:一次編譯,到處運(yùn)行。
C語言的跨平臺原理則是,直接編譯執(zhí)行為當(dāng)前操作系統(tǒng)的機(jī)器碼,這樣也實(shí)現(xiàn)了不同操作系統(tǒng)上運(yùn)行的效果。
即C語言源文件是跨平臺的,但其編譯后的文件無法跨平臺使用,顯而易見,因?yàn)镃語言是多次編譯多次運(yùn)行。
因此,如果跨平臺單指編譯后的文件跨平臺,那么JAVA是跨平臺語言,而C語言不算。
如下圖所示: