欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Java和C++的性能實(shí)例比較分析-創(chuàng)新互聯(lián)

這篇文章主要介紹“Java和C++的性能實(shí)例比較分析”,在日常操作中,相信很多人在Java和C++的性能實(shí)例比較分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java和C++的性能實(shí)例比較分析”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

為玄武等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及玄武網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、玄武網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

1. 概述


編程語言根據(jù)其抽象級別進(jìn)行分類。我們區(qū)分高級語言(Java,Python,JavaScript,C  ++,Go),低級語言(匯編程序),最后是機(jī)器代碼。

每個高級語言代碼(例如Java)都需要轉(zhuǎn)換為機(jī)器本地代碼才能執(zhí)行。該翻譯過程可以是編譯或解釋。但是,還有第三種選擇。試圖利用兩種方法的組合。

2. 編譯與解釋

讓我們開始研究編譯和解釋語言之間的一些差異。

2.1 編譯語言

編譯器將編譯語言(C ++,Go)直接轉(zhuǎn)換為機(jī)器碼。

在執(zhí)行之前,它們需要明確的構(gòu)建步驟。這就是為什么每次更改代碼時都需要重新編譯程序。

編譯語言往往比解釋語言更快,更有效。但是,它們生成的機(jī)器碼是特定于平臺的。

2.2 解釋語言

在解釋語言(Python,JavaScript)中,沒有構(gòu)建步驟。相反,解釋器在執(zhí)行程序時對程序的源代碼進(jìn)行操作。

曾經(jīng)認(rèn)為解釋語言比編譯語言要慢得多。但是,隨著即時編譯(JIT)的發(fā)展,性能差距正在縮小。JIT編譯器在程序運(yùn)行時將代碼從解釋語言轉(zhuǎn)換為機(jī)器碼。

此外,我們可以在Windows,Linux或Mac等多個平臺上執(zhí)行解釋后的語言代碼。解釋代碼與特定類型的CPU體系結(jié)構(gòu)沒有關(guān)聯(lián)。

3. Write Once Run Anywhere

Java和JVM在設(shè)計(jì)時考慮了可移植性。因此,當(dāng)今大多數(shù)流行的平臺都可以運(yùn)行Java代碼。

這聽起來似乎暗示著Java是一種純解釋性語言。但是,在執(zhí)行之前,需要將Java源代碼編譯為字節(jié)碼。字節(jié)碼是JVM固有的一種特殊機(jī)器語言。JVM在運(yùn)行時解釋并執(zhí)行此代碼。

它是JVM為支持Java的每個平臺構(gòu)建和定制的,并不是我們的程序或庫。

JVM也具有JIT編譯器。這意味著JVM在運(yùn)行時優(yōu)化我們的代碼,以獲得與編譯語言相似的性能優(yōu)勢。

4. Java編譯器

javac的命令行工具把Java源代碼編譯轉(zhuǎn)換成Java類文件(xxx.class)與平臺無關(guān)的字節(jié)碼:

$ javac HelloWorld.java

源代碼文件帶有.java后綴,而包含字節(jié)碼的類文件則帶有.class后綴。

Java和C++的性能實(shí)例比較分析

5. Java虛擬機(jī)

編譯的類文件(字節(jié)碼),可以由JVM執(zhí)行:

$ java HelloWorld Hello Java!

在運(yùn)行時如何將字節(jié)碼轉(zhuǎn)換為機(jī)器本機(jī)代碼。

5.1 架構(gòu)概述

JVM由五部分組成:

  • 類加載器

  • JVM內(nèi)存結(jié)構(gòu)

  • 執(zhí)行引擎

  • 本地方法接口

  • 本地方法庫

Java和C++的性能實(shí)例比較分析

5.2 類加載器

JVM利用ClassLoader將已編譯的類文件加載到JVM內(nèi)存

除加載外,ClassLoader還執(zhí)行鏈接和初始化。

  • 驗(yàn)證字節(jié)碼是否存在安全漏洞

  • 為靜態(tài)變量分配內(nèi)存

  • 用原始引用替換符號內(nèi)存引用

  • 將原始值分配給靜態(tài)變量

  • 執(zhí)行所有靜態(tài)代碼塊

5.3 執(zhí)行引擎

執(zhí)行引擎負(fù)責(zé)讀取字節(jié)碼,將其轉(zhuǎn)換為機(jī)器本機(jī)代碼并執(zhí)行。

三個主要組件負(fù)責(zé)執(zhí)行,包括解釋器和編譯器:

  • 由于JVM與平臺無關(guān),因此它使用解釋器執(zhí)行字節(jié)碼

  • JIT編譯器在重復(fù)的方法調(diào)用處,把字節(jié)碼編譯為本地代碼以提高性能。

  • 垃圾收集器收集并刪除所有未引用的對象。

執(zhí)行引擎利用本機(jī)方法接口(JNI)來調(diào)用本地庫和應(yīng)用程序。

5.4 即時編譯器(JIT)

解釋器的主要缺點(diǎn)是:每次調(diào)用方法時,都需要解釋執(zhí)行,這比編譯的本機(jī)代碼要慢。Java使用JIT編譯器來克服此問題。

JIT編譯器不能完全替代解釋器。執(zhí)行引擎仍在使用它。但是,JVM根據(jù)調(diào)用方法的頻率使用JIT編譯器。

JIT編譯器將整個方法的字節(jié)碼編譯為機(jī)器本機(jī)代碼,因此可以直接重用。與標(biāo)準(zhǔn)編譯器一樣,生成中間代碼,進(jìn)行優(yōu)化,然后生成機(jī)器本機(jī)代碼。

探查器是JIT編譯器的特殊組件,負(fù)責(zé)查找熱點(diǎn)。JVM根據(jù)運(yùn)行時收集的性能分析信息來決定要編譯的代碼。

Java和C++的性能實(shí)例比較分析

這樣的效果是,經(jīng)過幾個執(zhí)行周期,Java程序可以更快地執(zhí)行其工作。JVM了解到熱點(diǎn)后,便可以創(chuàng)建本機(jī)代碼,從而使運(yùn)行速度更快。

6. 性能比較

讓我們看一下JIT編譯如何提高Java的運(yùn)行時性能。

6.1 斐波那契數(shù)列性能測試

我們將使用一種簡單的遞歸方法來計(jì)算第n個斐波那契數(shù):

private static int fibonacci(int index) {     if (index <= 1) {         return index;     }     return fibonacci(index-1) + fibonacci(index-2); }

為了衡量重復(fù)方法調(diào)用的性能收益,我們將運(yùn)行Fibonacci方法100次:

for (int i = 0; i < 100; i++) {     long startTime = System.nanoTime();     int result = fibonacci(12);     long totalTime = System.nanoTime() - startTime;     System.out.println(totalTime); }

首先,我們將正常編譯并執(zhí)行Java代碼:

$ java Fibonacci.java

然后,我們將在禁用JIT編譯器的情況下執(zhí)行相同的代碼:

$ java -Djava.compiler=NONE Fibonacci.java

最后,我們將在C ++和JavaScript中實(shí)現(xiàn)并運(yùn)行相同的算法進(jìn)行比較。

6.2 性能測試結(jié)果

讓我們看一下運(yùn)行斐波那契數(shù)列測試后以納秒為單位測量的平均性能:

  • 使用JIT編譯器的Java &ndash; 2726 ns &ndash;最快

  • 沒有JIT編譯器的Java &ndash; 17965 ns &ndash;慢559%

  • 沒有O2優(yōu)化的C ++ &ndash; 9435 ns &ndash;降低246%

  • 具有O2優(yōu)化的C ++ &ndash; 3639 ns &ndash;慢33%

  • JavaScript &ndash; 22998 ns &ndash;慢743%

在此示例中,使用JIT編譯器,Java的性能提高了500%以上。但是,JIT編譯器確實(shí)需要運(yùn)行一些才能運(yùn)行。

有趣的是,即使在啟用O2優(yōu)化標(biāo)志的情況下編譯C ++,Java的性能也比C ++代碼好33%。當(dāng)仍在解釋Java時,C  ++在前幾次運(yùn)行中的性能要好得多。

Java還勝過與Node一起運(yùn)行的等效JavaScript代碼,后者也使用JIT編譯器。結(jié)果顯示性能提高了700%以上。主要原因是Java的JIT編譯器啟動速度更快。

到此,關(guān)于“Java和C++的性能實(shí)例比較分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

文章標(biāo)題:Java和C++的性能實(shí)例比較分析-創(chuàng)新互聯(lián)
當(dāng)前URL:http://aaarwkj.com/article16/cojcgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器關(guān)鍵詞優(yōu)化、電子商務(wù)、外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
久久香蕉国产线看观看av| 最新国产精品欧美激情| 日韩高清精品视频在线| 久久热在线观看免费高清| 国产精品网站在线观看不卡| 白白日韩欧美在线视频| 欧美日韩国产成人一区| 日本女优高清不卡一二三四区| av一区二区日韩精品久| 未满十八禁止观看免费| 亚洲一区二区视频在线观看免费| 精品av一区二区在线| 国产探花猛操性感美女| 麻豆AV一区二区三区久久| 青青草视频在线好好热| 欧美精品国产欧美精品国产| 欧美三级特黄在线播放| 亚洲一二三区精品与老人| 欧美日韩黄色的三级视频| 日韩精品日本道欧美黄片| 日本成人一区二区三区视频| 成人黄色三级免费网站| 一区二区三区欧美日韩| 麻豆蜜桃精品视频在线观看 | 人妻久久一区二区三区精品99| 四虎成人免费永久视频| 亚洲经典日韩欧美一区| 欧美日韩一区二区激情在线| 亚洲av日韩欧美精品| 日韩精品一区二区三区电影在线播放 | 国产中文字幕一区久久| 成人免费在线视频不卡| 国产三级视频在线观看视频| 丝袜美腿美女日韩在线| 深夜av一区二区三区| 99久久免费中文字幕| 97视频在线观看免费| 麻豆专区一区二区三区| 成人自拍偷拍在线视频| 日本女优中文字幕久久| 日本中文一区在线观看|