成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

java與C 代碼運(yùn)行效率的對比(整理)

瀏覽:30日期:2022-08-14 13:49:02
1、Java 語言的概述

作為一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,Java 與 C++極為 類似,但卻要比 C++簡單的多。它在集成其他語言的特點(diǎn) 和優(yōu)勢的同時(shí)又有自己獨(dú)特的優(yōu)勢。

Java 的主要特點(diǎn)如下:

(1)簡單性。Java 可以對內(nèi)存中產(chǎn)生的垃圾進(jìn)行自動(dòng)收集, 大幅度降低了程序的復(fù)雜程度,此外,Java 添加了更為實(shí) 用的功能的,這使得程序開發(fā)更加簡單可靠。

(2)平臺(tái)獨(dú) 立性。Java 語言在程序編程過程中是先編譯成中間碼,然 后再進(jìn)行裝載與校驗(yàn),最后通過翻譯出來的不同的機(jī)器碼 來執(zhí)行。因此,只要能支持 Java 虛擬機(jī),就可運(yùn)行各種 J ava 程序。這也是 Java 最吸引人、使用方便的原因。

(3) 面向?qū)ο蟮募夹g(shù)。近年來軟件開發(fā)中使用最多的就是面向 對象的技術(shù)。面向?qū)ο蠹夹g(shù)是指在編程過程中,以一種更 加直觀的、人們更容易接受的方式來編程的技術(shù)。而 Java 的動(dòng)態(tài)聯(lián)網(wǎng)編程特性,將面向?qū)ο蟮膬?yōu)勢發(fā)揮到最大。

2、C 語言的概述

C 語言,作為一種新的程序設(shè)計(jì)語言,它結(jié)合了匯編 語言與高級語言兩種語言的優(yōu)勢,使得它的應(yīng)用更加簡單、 普及。如今,C 語言已經(jīng)應(yīng)用于各種類型的微型機(jī)上。在編寫程序時(shí),C 語言可以直接進(jìn)行程序的編程。因此,C 語言在應(yīng)用方面十分廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力。C 語言的應(yīng)用已不僅僅是用于軟件開發(fā),各類科研都需要用 到 C 語言。

C 語言的優(yōu)點(diǎn):1.是簡潔緊湊、靈活方便;2.運(yùn)算符 豐富;3.數(shù)據(jù)類型豐富;4.表達(dá)方式靈活多用;5.生成目標(biāo)代碼 質(zhì)量高、程序執(zhí)行效率高;可移植性高。

因?yàn)?C 語言是將 相同數(shù)據(jù)堆放在一塊,這就使得 C 語言的數(shù)據(jù)存在很大的 安全缺陷,一旦出現(xiàn)意外,所有數(shù)據(jù)都將丟失。

此外,C 語言在語法限制以及變量的類型上比較寬松,這樣就會(huì)影 響到程序的安全性。而且 C 語言比其他高級語言的難度大, 完全掌握是很不易的。

3、c 和 java的 編譯器對比

Java與C/C++的編譯器對比實(shí)際上是代表了最經(jīng)典的JIT編譯器與靜態(tài)編譯器的對比,

(注釋:JIT編譯器,英文寫作Just-In-Time Compiler,中文意思是即時(shí)編譯器。JIT編譯器能夠?qū)SIL編譯成為各種不同的機(jī)器代碼,以適應(yīng)對應(yīng)的系統(tǒng)平臺(tái),最終使得程序在目標(biāo)系統(tǒng)中得到順利地運(yùn)行。 靜態(tài)編譯,就是編譯器在編譯可執(zhí)行文件的時(shí)候,將可執(zhí)行文件 需要調(diào)用的對應(yīng)動(dòng)態(tài)鏈接庫(.so或.lib)中的部分提取出來,鏈接到可執(zhí)行文件中去,使可執(zhí)行文件在運(yùn)行的時(shí)候不依賴于動(dòng)態(tài)鏈接庫。)

也很大程度上決定了Java與C/C++的性能對比的結(jié)果,

因?yàn)闊o論是C/C++還是Java代碼,最終編譯之后被機(jī)器執(zhí)行的都是本地機(jī)器碼,哪種語言性能更高,除了它們自身的API庫實(shí)現(xiàn)得好壞以外,其余的比較就成了一場“拼編譯器”、“拼輸出代碼質(zhì)量”的游戲。

當(dāng)然,這種比較也是剔除了開發(fā)效率的片面對比,語言間孰優(yōu)孰劣,誰快誰慢的問題都是很難有結(jié)果的爭論,下面我們就回到正題,看看這兩種語言的編譯器各有何優(yōu)勢。

原因如下:

(1)因?yàn)镴IT編譯器運(yùn)行占用的是用戶程序運(yùn)行時(shí)間,具有很大的時(shí)間壓力,它能提供的優(yōu)化手段也嚴(yán)重受制于編譯成本。如果編譯速度不能達(dá)到要求,那用戶將在啟動(dòng)程序或程序的某部分察覺到重大延遲,這點(diǎn)使得JIT編譯器不敢隨便引入大規(guī)模的優(yōu)化技術(shù),而編譯的時(shí)間成本在靜態(tài)優(yōu)化編譯器中并不是主要的關(guān)注點(diǎn)。

  (2),Java語言是動(dòng)態(tài)的類型安全語言,這意味著需要由虛擬機(jī)來確保程序不會(huì)違反語言語義或訪問非結(jié)構(gòu)化內(nèi)存。在實(shí)現(xiàn)層面上看,這就意味著虛擬機(jī)必須頻繁進(jìn)行動(dòng)態(tài)檢查,如對象實(shí)例訪問時(shí)檢查空指針、數(shù)組元素訪問時(shí)檢查上下界范圍、類型轉(zhuǎn)換時(shí)檢查繼承關(guān)系等等。對于這類程序代碼沒有明確寫出的檢查行為,盡管編譯器會(huì)努力進(jìn)行優(yōu)化,但是總體上仍然要消耗著不少的運(yùn)行時(shí)間。

 (3)Java語言中雖然沒有virutal關(guān)鍵字,但是使用虛方法的頻率卻遠(yuǎn)遠(yuǎn)大于C/C++語言,這意味著運(yùn)行時(shí)對方法接收者進(jìn)行多態(tài)選擇的頻率要遠(yuǎn)遠(yuǎn)大于C/C++語言,也意味著JIT編譯器在進(jìn)行一些優(yōu)化,如方法內(nèi)聯(lián)時(shí)難度要遠(yuǎn)大于C/C++的靜態(tài)優(yōu)化編譯器。

 (4)Java語言是可以動(dòng)態(tài)擴(kuò)展的語言,運(yùn)行時(shí)加載新的類可能改變程序類型繼承關(guān)系,這使得很多全局的優(yōu)化都難以進(jìn)行,因?yàn)榫幾g器無法看見程序的全貌,許多全局優(yōu)化措施都只能以激進(jìn)優(yōu)化的方式來完成,編譯器不得不時(shí)刻注意并隨著類型變化而在運(yùn)行是撤消或重新進(jìn)行一些優(yōu)化。

 (5)Java語言中的對象內(nèi)存分配都是堆上進(jìn)行,只有方法中的局部變量才在棧上分配。而C/C++的對象則有多種內(nèi)存分配方式,既可能在堆上分配,也可能在棧上分配,如果可以把線程私有的對象在棧上分配,將可以減輕內(nèi)存回收的壓力,也不需要考慮內(nèi)存屏障方面的問題。另外,C/C++中主要由用戶程序代碼來回收分配的內(nèi)存,這就不存在無用對象篩選的過程,因此效率上(僅指運(yùn)行效率,排除了開發(fā)效率)也垃圾收集機(jī)制要高。

(6)因?yàn)镃是編譯型的,直接將源碼編譯成機(jī)器代碼;而JAVA是解釋型,源碼被編譯成二進(jìn)制偽代碼,由JAVA虛擬機(jī)解釋執(zhí)行。但是,由于C是編譯型的,它的可移植性差;而JAVA是解釋執(zhí)行,因此具有很好的移植性,可跨平臺(tái)運(yùn)行。

同時(shí):編一個(gè)普通的本地應(yīng)用程序,一般c 要快于java, 編web應(yīng)用,由于c實(shí)現(xiàn)的cgi程序基本是進(jìn)程型,而java application server 的管理servlet采用線程方式,所以,在訪問量大的情況下,java有優(yōu)勢。

 (finally)Java語言相對C/C++的劣勢上面說了一大堆,倒不是說Java就真的不如C/C++了,相信大家也注意到了,Java語言的這些性能上的劣勢都是為了換取開發(fā)效率上的優(yōu)勢而付出的代價(jià),動(dòng)態(tài)安全、動(dòng)態(tài)擴(kuò)展、垃圾回收這些“拖后腿”特性都為Java語言的開發(fā)效率作出了很大貢獻(xiàn)。何況,也不見得就沒有Java的JIT編譯器能做,而C/C++的靜態(tài)優(yōu)化編譯器不能做的優(yōu)化:由于C/C++編譯器的靜態(tài)性,以運(yùn)行期性能監(jiān)控為基礎(chǔ)的優(yōu)化措施它都無法進(jìn)行,如調(diào)用頻率預(yù)測(Call Frequency Prediction)、分支頻率預(yù)測(Branch Frequency Prediction)、裁剪未被選擇的分支(Untaken Branch Pruning)等,這些都會(huì)形成一些Java語言獨(dú)有的性能優(yōu)勢

4、Java程序比C/C++程序慢的影響因素

1)解釋性語言固有開銷:java程序在運(yùn)行時(shí)類加載器從類路經(jīng)中加載相關(guān)的類,然后java虛擬機(jī)讀取該類文件的字節(jié),執(zhí)行相應(yīng)操作.而C 編譯的時(shí)候?qū)⒊绦蚓幾g成本地機(jī)器碼.一般來說java程序執(zhí)行速度要比C 慢10-30倍.即使采用just-in-time compiling (讀取類文件字節(jié)后,編譯成本地機(jī)器碼)技術(shù),速度也要比C 慢好多.

2)字節(jié)碼加載執(zhí)行開銷:java程序要從網(wǎng)絡(luò)上加載類字節(jié),然后執(zhí)行,這也是導(dǎo)致java運(yùn)行速度慢的原因.

3)運(yùn)行時(shí)溢出檢測開銷:在程序運(yùn)行過程中,java虛擬機(jī)要檢測數(shù)組是否越界,在C 中則不檢測.

4)堆與棧的區(qū)別:java中所有的對象都創(chuàng)建在堆中,沒有對象被創(chuàng)建在stack中,而C 有的對象和變量是創(chuàng)建在stack中的

5)運(yùn)行時(shí)引用檢測開銷:java在運(yùn)行過程中檢測對象的引用是否為空,如果引用指向都空指針,且執(zhí)行某個(gè)方法時(shí)會(huì)拋出空指針異常

6)運(yùn)行時(shí)類型檢測開銷:java運(yùn)行時(shí)對類型檢測,如果類型不正確會(huì)拋出ClassCastException異常.

7)GC巨大開銷:java的垃圾回收機(jī)制較C 由程序員管理內(nèi)存效率更低.

8)類型轉(zhuǎn)換開銷:java中的原始數(shù)據(jù)類型在每個(gè)操作系統(tǒng)平臺(tái)長度都是相同,而C 這些數(shù)據(jù)類型長度是隨操作系統(tǒng)的不同而不同,所以java在不同操作系統(tǒng)上執(zhí)行時(shí)有個(gè)轉(zhuǎn)化過程.

9)String類型開銷:在java中String 是UNICODE.當(dāng)java要操作一個(gè) ASCII string 時(shí),比C 效率上相對要低一些.

10)動(dòng)態(tài)鏈接開銷:java中采用的是動(dòng)態(tài)鏈接

5、結(jié)論

綜上所述,C 語言的運(yùn)行效率 要比 Java 的高很多(有人說是高10-30倍)。因?yàn)?C 語言是屬于編譯型的,而 Java 語言則是解釋型的。Java 語言運(yùn)行時(shí)要先被翻譯成計(jì)算機(jī)能 辨識的二進(jìn)制代碼,然后才能執(zhí)行。雖然在一些的程序測試 中 C 語言要快于 Java 語言,但這并不是絕對的。在實(shí)際中, 要根據(jù)不同語言應(yīng)用范圍,才能選擇某一語言程序。

到此這篇關(guān)于java與C 代碼運(yùn)行效率的對比(整理)的文章就介紹到這了,更多相關(guān)java和C 代碼運(yùn)行效率內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
老司机精品视频网站| 国产精品一区专区| 国产传媒久久文化传媒| 日本黄色一区二区| 亚洲国产一区二区三区青草影视 | 国产在线视视频有精品| 久久男女视频| 亚洲成人tv网| 亚洲成色精品| 欧美激情一区二区三区不卡| 91在线免费视频观看| 精品91自产拍在线观看一区| 粉嫩av一区二区三区在线播放| 88在线观看91蜜桃国自产| 九九在线精品视频| 在线观看一区二区视频| 日韩av在线发布| 久久精品动漫| 日韩和欧美的一区| 色婷婷综合久久久中文一区二区 | 国产精品自拍在线| 日韩午夜激情免费电影| 白白色 亚洲乱淫| 久久精品一区四区| 色综合久久中文字幕| 国产欧美综合色| 欧美一区二区三区在线播放| 国产精品嫩草99a| 亚洲激情影院| 亚洲丶国产丶欧美一区二区三区| 国产精品美女黄网| 天天色天天爱天天射综合| 在线观看精品一区| 国产在线视频一区二区| 日韩一区二区免费在线电影| 大美女一区二区三区| 久久亚洲精品小早川怜子| 欧美在线三级| 亚洲色图都市小说| 国产精品久久久久久久久婷婷 | 国产精品豆花视频| 亚洲风情在线资源站| 在线欧美日韩国产| 国产成人福利片| 久久婷婷综合激情| 极品日韩久久| 亚洲成人免费视| 欧美在线一二三四区| 国内成+人亚洲+欧美+综合在线| 日韩网站在线看片你懂的| 91蜜桃免费观看视频| 亚洲男人天堂av| 在线影视一区二区三区| 国产白丝网站精品污在线入口| 久久久久久久网| 在线日韩中文| 婷婷亚洲久悠悠色悠在线播放| 91福利精品视频| 国产精品一区二区果冻传媒| 精品国产乱码久久久久久1区2区 | 国产一区在线不卡| 26uuu国产在线精品一区二区| 亚洲私人影院| 天天av天天翘天天综合网色鬼国产 | 亚洲三级网站| 蜜桃精品在线观看| 精品少妇一区二区三区在线播放| 欧美成人免费在线| 亚洲与欧洲av电影| 欧美色精品天天在线观看视频| 成人黄色av电影| 亚洲三级在线观看| 久久久www| 国产成人丝袜美腿| 国产精品久久久久一区| 一本一本久久a久久精品综合麻豆| 激情五月婷婷综合网| 久久婷婷综合激情| 亚洲综合不卡| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲综合日本| 成人一级视频在线观看| 日韩毛片精品高清免费| 日本韩国欧美在线| 91免费观看视频在线| 日韩极品在线观看| 久久―日本道色综合久久 | 国产午夜一区二区三区| 久久看片网站| 成熟亚洲日本毛茸茸凸凹| 尤物视频一区二区| 欧美日韩1区2区| 国产一区二区三区无遮挡| 日本在线不卡一区| 国产日韩av一区二区| 一本一本久久a久久精品综合麻豆| aaa欧美日韩| 午夜精品在线视频一区| 日韩精品一区二区三区视频在线观看 | 国产丝袜在线精品| 久久综合九色99| 99在线视频精品| 五月综合激情日本mⅴ| 久久婷婷综合激情| 欧美亚洲动漫精品| 亚洲高清在线观看一区| 国产成人亚洲综合a∨猫咪| 亚洲精品免费看| 欧美白人最猛性xxxxx69交| 99视频日韩| 粉嫩av一区二区三区粉嫩| 午夜免费久久看| 国产日韩亚洲欧美综合| 色噜噜夜夜夜综合网| 欧美日韩一区综合| 国产精品一区一区| 亚洲狠狠爱一区二区三区| 久久蜜臀精品av| 在线免费观看不卡av| 亚洲东热激情| 成人伦理片在线| 久热成人在线视频| 国产精品国产三级国产普通话三级 | 精品一区在线看| 亚洲欧美另类久久久精品2019| 日韩欧美成人一区| 久久免费黄色| 精品福利电影| 成人免费视频一区| 麻豆成人91精品二区三区| 一区二区三区在线影院| 久久久国产精品不卡| 欧美精品第1页| 色欧美日韩亚洲| 一本色道88久久加勒比精品| 成人禁用看黄a在线| 激情综合网最新| 亚洲一卡二卡三卡四卡无卡久久| 国产午夜精品一区二区三区视频 | 欧美一区二区免费观在线| 色婷婷一区二区| 99国产一区| 欧美一区亚洲| 国产高清不卡二三区| 日韩精品午夜视频| 伊人一区二区三区| 国产精品狼人久久影院观看方式| 欧美sm极限捆绑bd| 91精品久久久久久久99蜜桃| 色哟哟亚洲精品| 欧美中文字幕| 亚洲午夜精品福利| 欧美国产免费| 9l国产精品久久久久麻豆| 国产精品亚洲专一区二区三区| 美国欧美日韩国产在线播放| 日本午夜精品视频在线观看| 日韩有码一区二区三区| 三级久久三级久久久| 亚洲国产美女搞黄色| 亚洲美女区一区| 亚洲人妖av一区二区| 亚洲国产成人私人影院tom| 26uuu久久综合| 日韩视频免费直播| 欧美精品色一区二区三区| 久久性色av| 久久精选视频| 久久激情一区| 久久精品成人| 久久久久久精| 老牛国产精品一区的观看方式| 亚洲综合精品四区| 亚洲一区二区伦理| 国产模特精品视频久久久久| 99成人在线| 免播放器亚洲| 一本到三区不卡视频| 在线免费观看日韩欧美| 欧美日韩中文字幕一区二区| 欧美日韩和欧美的一区二区| 欧美日韩国产片| 91精品国产综合久久精品| 日韩欧美在线1卡| 精品久久久久av影院| 久久一区二区三区四区| 久久久久久久综合日本| 久久嫩草精品久久久久| 欧美国产在线观看| 亚洲欧美在线高清| 一区二区成人在线| 丝袜美腿亚洲综合| 麻豆91免费看| 国产一区二区三区香蕉| 国产+成+人+亚洲欧洲自线| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美激情日韩| 一区在线观看| 香蕉久久夜色| 欧洲色大大久久|