java開發(fā) 為什么java運(yùn)行效率低,而目前的大數(shù)據(jù)平臺(tái)卻都用java而不用C 開發(fā)?
為什么java運(yùn)行效率低,而目前的大數(shù)據(jù)平臺(tái)卻都用java而不用C 開發(fā)?Java的啟動(dòng)速度確實(shí)很慢,但是在系統(tǒng)穩(wěn)定運(yùn)行后,JIT編譯器可以大大提高Java的運(yùn)行速度。在使用了專業(yè)定制的商業(yè)JDK之
為什么java運(yùn)行效率低,而目前的大數(shù)據(jù)平臺(tái)卻都用java而不用C 開發(fā)?
Java的啟動(dòng)速度確實(shí)很慢,但是在系統(tǒng)穩(wěn)定運(yùn)行后,JIT編譯器可以大大提高Java的運(yùn)行速度。在使用了專業(yè)定制的商業(yè)JDK之后,Java的運(yùn)行速度不再是問題,比如alijdk。而且,對(duì)于互聯(lián)網(wǎng)企業(yè)來說,可以通過虛擬化技術(shù)大規(guī)模增加機(jī)器,也可以使用云計(jì)算,機(jī)器的性能還不夠?,F(xiàn)在有了一種混合技術(shù),甚至機(jī)器資源都可以共享。一般來說,Java的效率并不是瓶頸。
另一方面,Java的生態(tài)已經(jīng)非常成熟。通用的框架、大量的程序員、各大公司的商業(yè)應(yīng)用都是Java的芯片。Java最成功的技術(shù)是虛擬機(jī)技術(shù),現(xiàn)在kotlin和其他基于JVM的語言誕生了??梢哉f,Java的地位在短時(shí)間內(nèi)是不可撼動(dòng)的。
Java誕生于C之后,它解決了C的許多問題,如指針引起的安全問題。已經(jīng)做了很多優(yōu)化,比如去掉完全面向?qū)ο蟮慕Y(jié)構(gòu)化編程,添加垃圾回收機(jī)制以避免內(nèi)存泄漏。如果你不需要操作底層,比如修改內(nèi)存數(shù)據(jù)和操作硬件,但是做純粹的上層應(yīng)用程序,C就不如Java好。分享學(xué)習(xí)筆記和技術(shù)總結(jié),涵蓋Java技術(shù)、軟件架構(gòu)、前沿技術(shù)、開源框架、數(shù)據(jù)結(jié)構(gòu)與算法、編程感悟等領(lǐng)域,歡迎使用微信公眾號(hào)“程序心”。
為什么感覺程序員以寫java語言為主?
對(duì)于it技術(shù)界來說,程序員非常普遍,尤其是在一些城市的科學(xué)城。估計(jì)十個(gè)人在路上就能找到一半的程序員。另一個(gè)奇怪的現(xiàn)象是,這些程序員中的絕大多數(shù)都從事Java編程和開發(fā)。為什么會(huì)出現(xiàn)這種現(xiàn)象?
廣泛應(yīng)用于桌面應(yīng)用程序(如傳統(tǒng)的exe程序)、web應(yīng)用程序、各種分布式和嵌入式系統(tǒng)。
盡管Java有一些缺點(diǎn),例如占用內(nèi)存和運(yùn)行速度比C/C慢,但它總是排在前兩位的編程語言中,這顯示了它的影響力。
盡管有許多用于web的編程語言,但大多數(shù)Internet、電子商務(wù)網(wǎng)站和金融應(yīng)用程序后端都使用Java作為主要開發(fā)語言,這導(dǎo)致市場對(duì)Java工作的需求不斷增加。
在Android和大數(shù)據(jù)技術(shù)出現(xiàn)之前,Java的應(yīng)用場景更多的是web應(yīng)用和嵌入式系統(tǒng)。Android系統(tǒng)誕生后,Java成為Android應(yīng)用的首選開發(fā)語言,使得Java的應(yīng)用場景更加多樣化。
此外,許多流行的大數(shù)據(jù)開發(fā)平臺(tái)也基于Java。例如,Hadoop是用Java語言編寫的。
總而言之,我覺得大多數(shù)程序員都偏愛Java,因?yàn)镴ava的市場需求很大。
為什么在招聘網(wǎng)站上看到招聘JAVA的很多,而C語言和C 相對(duì)很少?
因?yàn)樾枨鬀Q定一切?;ヂ?lián)網(wǎng)使用C的很少,基本上只有傳統(tǒng)的it-CT廠商和硬件結(jié)合的項(xiàng)目使用C的
以前C的功能比較強(qiáng)大,但是因?yàn)榭犹?,現(xiàn)在新項(xiàng)目中的C就少了。C依賴太多了,這很惡心,因?yàn)镃不屬于任何公司,標(biāo)準(zhǔn)委員會(huì)只指定標(biāo)準(zhǔn),不執(zhí)行標(biāo)準(zhǔn),C沒有實(shí)際意義上的二進(jìn)制ABI規(guī)范,所以在更改編譯器、升級(jí)編譯器版本、混合動(dòng)態(tài)時(shí)會(huì)出現(xiàn)不兼容的問題沒有編譯器編譯的庫,甚至更改STL實(shí)現(xiàn)?,F(xiàn)在C標(biāo)準(zhǔn)98/03/11/14/17/20中有很多標(biāo)準(zhǔn),它們的實(shí)現(xiàn)完全依賴于編譯器。因?yàn)樗粚儆谌魏喂荆杂泻芏喾N編譯器。各種各樣的不兼容性導(dǎo)致了一個(gè)運(yùn)行在g4.5下、使用03標(biāo)準(zhǔn)的優(yōu)秀遺留項(xiàng)目。想打開一個(gè)c11運(yùn)行,結(jié)果n堆編譯出錯(cuò)。在舊的標(biāo)準(zhǔn)可以用來寫,新的標(biāo)準(zhǔn)禁止。事實(shí)上,新標(biāo)準(zhǔn)C非常容易使用。但是,由于各種歷史原因,漏洞太多。對(duì)于技術(shù)水平一般的公司來說,要保持這樣的水平并不容易。而且,隨著硬件水平的提高,性能優(yōu)勢也不是很明顯。實(shí)際上,性能主要取決于編寫代碼的人。
Java屬于一家公司,標(biāo)準(zhǔn)、編譯器的制作要更加一致。而且升級(jí)后的版本不會(huì)有C那么多問題?,F(xiàn)代C非常容易使用,但是大多數(shù)C項(xiàng)目都是歷史項(xiàng)目,所以我們不能升級(jí)編譯器。十多年前,我們不得不繼續(xù)用C編寫代碼,所以C似乎很難使用。這與現(xiàn)代Java相比如何呢。
另一個(gè)重要原因是生態(tài)。Java中有太多可用的庫,并且有強(qiáng)大的包管理。而C語言是非常地道的C語言,編譯和擴(kuò)展頭文件的方式是一樣的。如果使用第三方庫,則必須自己編譯源代碼。如果使用高級(jí)編譯器,就不能使用低級(jí)編譯器。如果使用不同版本的STL,則可能存在錯(cuò)誤的連接。只要簡單地引用一個(gè)第三方庫就可以了。
我們不要談?wù)撜Z法和表達(dá)能力之間的區(qū)別。大多數(shù)公司只是想快速完成項(xiàng)目。它們很容易啟動(dòng)和使用很多東西。這才是最重要的。因此,有些語言的使用逐漸減少,但在某些領(lǐng)域是不可替代的,因此在同類語言出現(xiàn)之前不會(huì)被淘汰。
究竟是.Net好還是Java好,歡迎大家發(fā)言,暢所欲言?
我選擇dotnet,因?yàn)橛钪嬷杏械谝粋€(gè)ide-vs2019祝福,不接受駁斥。
java為什么這么熱門?
太過分了,伙計(jì),Java有兩個(gè)核心機(jī)制。第一種是java虛擬機(jī)(JVM)。我們程序員寫源代碼,也就是說。Java文件,然后必須將其編譯成。類文件。Java之所以只編譯一次,而且到處運(yùn)行,是因?yàn)楫?dāng)它運(yùn)行時(shí),Java虛擬機(jī)就不起作用了。類代碼并逐行解釋,并將其翻譯到操作系統(tǒng)中,因?yàn)椴僮飨到y(tǒng)本身不懂Java,它是虛擬機(jī)的翻譯,逐行解釋執(zhí)行,不同的操作系統(tǒng)平臺(tái)有不同的Java虛擬機(jī)。因此,Java真正實(shí)現(xiàn)了跨平臺(tái)、一次性編譯和隨處運(yùn)行。對(duì)于我們的程序員來說,這是一樣的。我們面臨著巨大的挑戰(zhàn)。Java和。類文件。如果一個(gè)程序想要執(zhí)行,它需要建立在操作系統(tǒng)環(huán)境上。Java不是操作系統(tǒng)的本地語言,Java也不是C,因此操作系統(tǒng)不能直接執(zhí)行。所以我們在程序和操作系統(tǒng)之間有一層Java虛擬機(jī)。好 ?。?/p>