前言
昨天在刷LeetCode時,在對之前的一道簡單題(13.羅馬數(shù)字轉(zhuǎn)整數(shù))進行二刷時,由于之前在學(xué)校學(xué)的是Java,所以之前已經(jīng)用Java做過一遍了,而最近在學(xué)JS,我就嘗試著用JS去做,也很快的做出來了。但當(dāng)我發(fā)現(xiàn)同樣的代碼JS花費的時間為116ms,而Java僅僅花費2ms,這使得我對這兩門語言產(chǎn)生了濃厚的興趣,我嘗試著去網(wǎng)上查找資料,最終寫下這篇文章。
JavaScript(耗時116ms):
Java(耗時2ms):
為什么會有如此大的差別呢?
之所以會有如此大的差別,主要是由于這兩門語言在設(shè)計和執(zhí)行環(huán)境上的差異導(dǎo)致的,主要分為以下因素:
編譯與解釋
Java:編譯型語言,Java代碼首先會被編譯成字節(jié)碼,然后在Java虛擬機(JVM)上運行。Java的這種編譯方式可以進行很多優(yōu)化,從而提高代碼的執(zhí)行速度。
JavaScript:解釋性語言,代碼在運行時,會由瀏覽器的JavaScript解釋器逐行進行解釋,然后再交給V8引擎去執(zhí)行。然而,正是因為這種解釋性質(zhì),會使得JavaScript的執(zhí)行速度通常較慢。
這就相當(dāng)于在JavaScript執(zhí)行代碼時存在一個中間商,將解釋器類比為中間商,最終到客戶手里商品的價格自然就會更高。所以JavaScript耗時會比Java長。
執(zhí)行環(huán)境不同
Java:執(zhí)行環(huán)境為Java虛擬機(JVM),它是一種高度優(yōu)化的運行時環(huán)境,專門設(shè)計用于執(zhí)行Java字節(jié)碼。由于JVM具有即時編譯器(Just-In-Time Compiler),它可以將字節(jié)碼編譯成的字節(jié)碼轉(zhuǎn)換為本機機器代碼,這將大大提高代碼的執(zhí)行速度。
JavaScript:執(zhí)行環(huán)境為瀏覽器或者Node.js等運行時環(huán)境。而這些環(huán)境都缺少了像Java的執(zhí)行環(huán)境JVM那種強大的編譯和優(yōu)化工具,因此執(zhí)行代碼時性能較差,執(zhí)行速度慢。
JVM就相當(dāng)于游戲加速器,而JS沒有,這使得Java的執(zhí)行性能要遠高于JavaScript.
既然Java比JavaScript快,為什么JavaScript沒被淘汰呢?
你別看兩門語言名字差不多,但是他們相同之處卻非常少,運用的領(lǐng)域也各不相同。Java和JavaScript這兩種語言沒有直接關(guān)系,盡管它們的名稱相似。其中Java是由Sun公司(現(xiàn)在是Oracle Corporation)開發(fā)的,而JavaScript最初由Netscape Communications Corporation開發(fā),后來被標(biāo)準(zhǔn)化為ECMAScript。
用途不同
Java:通常用于開發(fā)大型、高性能的應(yīng)用程序,包括企業(yè)級應(yīng)用、桌面應(yīng)用、游戲等,我們熟知的編譯軟件IDEA、Eclipse、netbean都是Java做的。游戲方面,曾爆火的游戲《我的世界》就是用Java開發(fā)的。Android的核心系統(tǒng)也是采用Java語言編寫的,尤其采用Java的核心庫,如Apache Harmony來實現(xiàn)JVM。因此,它在執(zhí)行速度和性能方面進行了很多優(yōu)化。
JavaScript:主要用于前端網(wǎng)頁的開發(fā),市面上現(xiàn)今大部分網(wǎng)站,以及微信小程序都是在JS結(jié)合其他后端語言,比如Node.js等語言進行開發(fā)的,其主要實現(xiàn)的目的是與用戶交互,因此它的執(zhí)行速度通常不是關(guān)鍵問題。
語言類型不同
Java:靜態(tài)類型語言,類型檢查在編譯時進行,這有助于檢測和預(yù)防很多錯誤,但也增加了編程的復(fù)雜性。
JavaScript:動態(tài)類型語言,類型檢查發(fā)生在運行時,這使得代碼更加靈活,但也可能導(dǎo)致在運行時出現(xiàn)類型相關(guān)的錯誤。
其他不同之處:
1、對象模型不同
Java:一種嚴(yán)格面向?qū)ο蟮木幊陶Z言,所有代碼都必須包含在類中,支持繼承、封裝、多態(tài)等面向?qū)ο缶幊谈拍睢?/p>
JavaScript:雖然也可以支持面向?qū)ο缶幊?,但其對象模型不同于Java。JavaScript的對象是動態(tài)的,可以隨時添加或刪除屬性和方法。
2、類型系統(tǒng)不同
Java:一種強類型語言,需要在編寫代碼時明確定義變量的類型,同時在編譯時進行類型檢查。
JavaScript:是一種弱類型語言,變量的類型可以在運行時動態(tài)更改,不需要明確指定類型。
總結(jié)
Java的執(zhí)行速度確實高于JavaScript,但Java和JavaScript也是兩種完全不同的編程語言,它們在用途上以及語法上存在很多不同之處,開發(fā)者需要根據(jù)具體項目需求來選擇使用哪種語言。盡管它們有相似的名稱,但它們沒有直接關(guān)聯(lián)。
編輯:黃飛
-
JAVA
+關(guān)注
關(guān)注
19文章
2975瀏覽量
105184 -
編程語言
+關(guān)注
關(guān)注
10文章
1951瀏覽量
35002 -
javascript
+關(guān)注
關(guān)注
0文章
525瀏覽量
53954
原文標(biāo)題:每天一個知識點:尋找JavaScript和Java的區(qū)別
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
JavaScript教程
Java SE、Java EE、Java ME之間的區(qū)別
JavaScript 簡介
Javascript高級程序設(shè)計 (pdf下載)
![<b class='flag-5'>Javascript</b>高級程序設(shè)計 (pdf下載)](https://file.elecfans.com/web2/M00/48/84/pYYBAGKhtAuAfSfhAAAgqlUKDVw391.jpg)
電線與電纜的區(qū)別有哪些?
JavaScript有什么特點_Java與JavaScript有什么不同
JavaScript的入門基礎(chǔ)教程免費下載
![<b class='flag-5'>JavaScript</b>的入門基礎(chǔ)教程免費下載](https://file.elecfans.com/web1/M00/AC/12/o4YBAF3BGc-AKxlNAAFPWP13jtE441.png)
CPU和GPU的區(qū)別有哪些
Java和JavaScript的區(qū)別異同分析
![<b class='flag-5'>Java</b>和<b class='flag-5'>JavaScript</b>的<b class='flag-5'>區(qū)別</b>異同分析](https://file.elecfans.com/web2/M00/5D/C0/poYBAGL0dPyAS83MAADHLP91lf4209.png)
java和javaweb和javascript的區(qū)別
javascript基于什么的語言
華納云:java web和java有什么區(qū)別java web和java有什么區(qū)別
![華納云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么<b class='flag-5'>區(qū)別</b><b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么<b class='flag-5'>區(qū)別</b>](https://file1.elecfans.com/web2/M00/FD/AC/wKgaomaWBouAMAnAAAAglmvluP4293.png)
評論