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