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