国产日韩精品一区_午夜色婷婷_久久精品aaaaaa毛片_综合狠狠_亚洲国产欧美日韩在线_超碰96

java 慢的原因,淺析Java慢的困惑
發(fā)布時間: 2022-03-12 16:40:40點擊次數(shù): 1087

早期(比如JDK1.2以前)的視乎是很慢的,后續(xù)版本由于現(xiàn)在有許多優(yōu)化手段的加入,Java正越來越快了。

現(xiàn)在呢也有很多關于Java和C/C++孰快孰慢的爭論。本人自己的理解,談一下影響Java程序運行速度的因素。


一、GC回收的機制


眾所周知,Java相對C/C++的一個很大進步就是有了GC機制,它能夠很大程序的避免C/C++常見的內存泄漏的發(fā)生。但是這也是有代價的,那就是因為JVM管理了所有內存分配釋放,當內存不夠時就需要做回收,每次回收都有掃描整個堆,然后要搬移一些內存數(shù)據(jù),新生代還好,如果是老年代的GC,會造成程序卡頓一段時間,很多時候是不能接受的,也極大的拖慢了程序的運行速度。雖然GC算法不斷改進的,但是也屬于只能優(yōu)化不能根治。


二、解釋性語言的原因


Java為了跨平臺,沒有直接編譯成機器指令,而是編譯成字節(jié)碼,運行時JVM需要加載這些字節(jié)碼,然后再逐條解釋執(zhí)行。在這個過程字節(jié)碼的加載需要時間,然后解釋執(zhí)行也需要時間。做同樣一件事情,編譯語言可以直接編譯成機器碼,運行時的CPU就直接執(zhí)行這些指令,而Java的是編譯成字節(jié)碼,運行時JVM要把字節(jié)碼翻譯成目標機器的可執(zhí)行指令,這里面就增加了一層的間接性,也會降低運行速度的。


三、JIT消耗資源來說


JIT是Java后續(xù)版本的改進升級,能把常執(zhí)行的方法或者語句塊即時編譯成機器碼,這樣確實能加快運行速度。但是這種編譯是即時發(fā)生,會和程序本身搶用運行資源,就會拖慢程序運行的速度。


四、基于棧的指令集啊


編譯語言多采用基于目標平臺寄存器的指令集,這樣能充分利用寄存器。為了很好地可移植性,沒有綁定某個目標平臺的寄存器,而是采用基于棧的指令集。頻繁的棧內存訪問會導致比較慢的速度,并且通常編譯相同語句產(chǎn)生的指令數(shù)量也要多于寄存器指令集。


五、大量使用堆內存很累


Java中對象創(chuàng)建被JVM托管,能夠避免越界或空指針訪問之類在C/C++中常見的問題。因為我們對象大多是創(chuàng)建在堆上的,而不是棧上的,其創(chuàng)建和維護成本上通常要更高一些。


六、AOT技術介紹


AOT技術能夠在字節(jié)碼安裝到目標平臺時,先編譯成目標平臺的執(zhí)行文件,這樣目標平臺就可以直接運行可執(zhí)行文件,速度上可以達到編譯類語言的水平。但是這樣會導致Java所擁有的動態(tài)加載功能喪失,所有字節(jié)碼都被編譯到執(zhí)行文件,不論其在運行時是否被使用到,并造成其產(chǎn)生的可執(zhí)行文件相對于字節(jié)碼來說體積更大。


*終,Java由于其跨平臺且管理內存等特性,給開發(fā)效率帶來了諸多進步,但是凡事有利也有弊,就是伴隨而來的是運行效率的降低。充分了解這些優(yōu)勢和劣勢,才能在合適的時候選擇合適的技術,以發(fā)揮*大的效能。


source from 網(wǎng)絡


標簽:





主站蜘蛛池模板: 国产无套免费网站69 | 亚洲一区二区三区视频 | 国产三级自拍 | 亚洲影库| 香蕉精品视频在线观看 | 亚洲h视频在线观看 | 天堂av资源网 | 天堂中文资源在线 | 17c在线| 国产一区二区三区免费视频 | 日韩乱码一区二区三区 | 日本一二区视频 | 欧美午夜精品久久久 | 深夜福利成人 | 99re热这里只有精品视频 | 免费一级淫片 | 亚洲性视频| 精品国产中文字幕 | 国产亚洲精品精品精品 | 人人澡人人干 | 99久久国产精 | 色呦呦在线视频 | 午夜天堂 | 国产一区在线视频观看 | 亚洲欧美日本一区 | 在线观看欧美日韩视频 | 最新av在线免费观看 | 日本大片在线播放 | 欧美a∨ | 99热免费 | 天天爽夜夜爽人人爽 | 青春草在线免费观看 | 欧美疯狂做受xxxxx高潮 | 一区二区三区四区视频在线 | 国产做受视频 | 人人爽人人爽人人片av | 艳母动漫在线免费观看 | 国产乱人乱偷精品视频 | 青青草av | 久久xxxx| av网在线观看 |