前言
昨天在刷LeetCode時(shí),在對之前的一道簡單題(13.羅馬數(shù)字轉(zhuǎn)整數(shù))進(jìn)行二刷時(shí),由于之前在學(xué)校學(xué)的是Java,所以之前已經(jīng)用Java做過一遍了,而最近在學(xué)JS,我就嘗試著用JS去做,也很快的做出來了。但當(dāng)我發(fā)現(xiàn)同樣的代碼JS花費(fèi)的時(shí)間為116ms,而Java僅僅花費(fèi)2ms,這使得我對這兩門語言產(chǎn)生了濃厚的興趣,我嘗試著去網(wǎng)上查找資料,最終寫下這篇文章。
JavaScript(耗時(shí)116ms):
Java(耗時(shí)2ms):
為什么會有如此大的差別呢?
之所以會有如此大的差別,主要是由于這兩門語言在設(shè)計(jì)和執(zhí)行環(huán)境上的差異導(dǎo)致的,主要分為以下因素:
編譯與解釋
Java:編譯型語言,Java代碼首先會被編譯成字節(jié)碼,然后在Java虛擬機(jī)(JVM)上運(yùn)行。Java的這種編譯方式可以進(jìn)行很多優(yōu)化,從而提高代碼的執(zhí)行速度。
JavaScript:解釋性語言,代碼在運(yùn)行時(shí),會由瀏覽器的JavaScript解釋器逐行進(jìn)行解釋,然后再交給V8引擎去執(zhí)行。然而,正是因?yàn)檫@種解釋性質(zhì),會使得JavaScript的執(zhí)行速度通常較慢。
這就相當(dāng)于在JavaScript執(zhí)行代碼時(shí)存在一個(gè)中間商,將解釋器類比為中間商,最終到客戶手里商品的價(jià)格自然就會更高。所以JavaScript耗時(shí)會比Java長。
執(zhí)行環(huán)境不同
Java:執(zhí)行環(huán)境為Java虛擬機(jī)(JVM),它是一種高度優(yōu)化的運(yùn)行時(shí)環(huán)境,專門設(shè)計(jì)用于執(zhí)行Java字節(jié)碼。由于JVM具有即時(shí)編譯器(Just-In-Time Compiler),它可以將字節(jié)碼編譯成的字節(jié)碼轉(zhuǎn)換為本機(jī)機(jī)器代碼,這將大大提高代碼的執(zhí)行速度。
JavaScript:執(zhí)行環(huán)境為瀏覽器或者Node.js等運(yùn)行時(shí)環(huán)境。而這些環(huán)境都缺少了像Java的執(zhí)行環(huán)境JVM那種強(qiáng)大的編譯和優(yōu)化工具,因此執(zhí)行代碼時(shí)性能較差,執(zhí)行速度慢。
JVM就相當(dāng)于游戲加速器,而JS沒有,這使得Java的執(zhí)行性能要遠(yuǎn)高于JavaScript.
既然Java比JavaScript快,為什么JavaScript沒被淘汰呢?
你別看兩門語言名字差不多,但是他們相同之處卻非常少,運(yùn)用的領(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來實(shí)現(xiàn)JVM。因此,它在執(zhí)行速度和性能方面進(jìn)行了很多優(yōu)化。
JavaScript:主要用于前端網(wǎng)頁的開發(fā),市面上現(xiàn)今大部分網(wǎng)站,以及微信小程序都是在JS結(jié)合其他后端語言,比如Node.js等語言進(jìn)行開發(fā)的,其主要實(shí)現(xiàn)的目的是與用戶交互,因此它的執(zhí)行速度通常不是關(guān)鍵問題。
語言類型不同
Java:靜態(tài)類型語言,類型檢查在編譯時(shí)進(jìn)行,這有助于檢測和預(yù)防很多錯(cuò)誤,但也增加了編程的復(fù)雜性。
JavaScript:動態(tài)類型語言,類型檢查發(fā)生在運(yùn)行時(shí),這使得代碼更加靈活,但也可能導(dǎo)致在運(yùn)行時(shí)出現(xiàn)類型相關(guān)的錯(cuò)誤。
其他不同之處:
1、對象模型不同
Java:一種嚴(yán)格面向?qū)ο蟮木幊陶Z言,所有代碼都必須包含在類中,支持繼承、封裝、多態(tài)等面向?qū)ο缶幊谈拍睢?/p>
JavaScript:雖然也可以支持面向?qū)ο缶幊蹋鋵ο竽P筒煌贘ava。JavaScript的對象是動態(tài)的,可以隨時(shí)添加或刪除屬性和方法。
2、類型系統(tǒng)不同
Java:一種強(qiáng)類型語言,需要在編寫代碼時(shí)明確定義變量的類型,同時(shí)在編譯時(shí)進(jìn)行類型檢查。
JavaScript:是一種弱類型語言,變量的類型可以在運(yùn)行時(shí)動態(tài)更改,不需要明確指定類型。
總結(jié)
Java的執(zhí)行速度確實(shí)高于JavaScript,但Java和JavaScript也是兩種完全不同的編程語言,它們在用途上以及語法上存在很多不同之處,開發(fā)者需要根據(jù)具體項(xiàng)目需求來選擇使用哪種語言。盡管它們有相似的名稱,但它們沒有直接關(guān)聯(lián)。
編輯:黃飛
-
JAVA
+關(guān)注
關(guān)注
20文章
2983瀏覽量
106602 -
編程語言
+關(guān)注
關(guān)注
10文章
1952瀏覽量
35835 -
javascript
+關(guān)注
關(guān)注
0文章
525瀏覽量
54395
原文標(biāo)題:每天一個(gè)知識點(diǎn):尋找JavaScript和Java的區(qū)別
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
JavaScript教程
Java SE、Java EE、Java ME之間的區(qū)別
JavaScript 簡介
Javascript高級程序設(shè)計(jì) (pdf下載)

電線與電纜的區(qū)別有哪些?
JavaScript有什么特點(diǎn)_Java與JavaScript有什么不同
JavaScript的入門基礎(chǔ)教程免費(fèi)下載

CPU和GPU的區(qū)別有哪些
Java和JavaScript的區(qū)別異同分析

java和javaweb和javascript的區(qū)別
javascript基于什么的語言
華納云:java web和java有什么區(qū)別java web和java有什么區(qū)別

評論