日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Java编译过程、c/c++编译过程区别

發(fā)布時間:2023/12/18 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java编译过程、c/c++编译过程区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Java編譯原理

1、Java編譯過程與c/c++編譯過程不同

Java編譯程序?qū)ava源程序編譯成jvm可執(zhí)行代碼--java字節(jié)碼.

c/c++編譯過程:

當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬件平臺運行而生成的。因此在編譯過程中,編譯程序通過查表將所有對符號的引用轉(zhuǎn)換為特定的內(nèi)存偏移量,以保證程序運行。

Java編譯過程:

Java編譯器卻不將對變量和方法的引用編譯為數(shù)值引用,也不確定程序執(zhí)行過程中的內(nèi)存布局,而是將些符號引用信息保留在字節(jié)碼中,由解釋器在運行過程中創(chuàng)立內(nèi)存布局,然后再通過查表來確定一個方法所在的地址,這樣就有效地保證了java的可移植性和安全性。

2、jvm工作原理

運行jvm字符碼的工作是由解釋器來完成的。解釋執(zhí)行過程分三步進行:代碼的裝入、代碼的校驗、和代碼的執(zhí)行。

裝入代碼的工作由“類裝載器classloader”完成。類裝載器負責裝入運行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被調(diào)

用的類。當類裝載器裝入一個類時,該類被放在自己的名字空間中。除了通過符號引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本臺計算機的所有類都在同一地址空間中,而所有從外部引進的類,都有一個自己獨立的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運行效率,同時又保證它們與從外部引進的類不會相互影響。

當裝入了運行程序需要的所有類后,解釋器便可確定整個可執(zhí)行程序的內(nèi)存布局。解釋器為符號引用與特定的地址空間建立對應關系及查詢表。通過在這一階段確定代碼的內(nèi)布局,java很好地解決了由超類改變而使子類崩潰的問題,同時也防止了代碼的非法訪問。

隨后,被裝入的代碼由字節(jié)碼校驗器進行檢查。校驗器可以發(fā)現(xiàn)操作數(shù)棧益處、非法數(shù)據(jù)類型轉(zhuǎn)化等多種錯誤。通過校驗后,代碼便開始執(zhí)行了。

java字節(jié)碼的執(zhí)行有兩種方式:

1)即時編譯方式:解釋器先將字節(jié)編譯成機器碼,然后再執(zhí)行該機器碼。

2)解釋執(zhí)行方式:解釋器通過每次解釋并執(zhí)行一小段代碼來完成java字節(jié)碼程序的所有操作。

轉(zhuǎn)載于:https://www.cnblogs.com/szs00szs/p/6073698.html

總結(jié)

以上是生活随笔為你收集整理的Java编译过程、c/c++编译过程区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。