java web 常驻内存,java解释执行后是否常驻内存?为何需要JIT技术?

以下解釋,是根據

.net和C#的原理給出,因為我不懂Java,但估計原理是一樣的。

估計你沒接觸C/C++之類的編譯型機制,沒關係,但你一定知道這些語言的執行速度快,那是因為被編譯為機器碼的緣故。機器碼是計算機直接執行的二進制指令,而解釋型語言呢,是要用一個語法解釋器把我們看到的文本代碼翻譯、編譯為機器指令再執行的,這就是它執行慢的原因,因為對一條循環語句來說,每次迭代都要重新編譯一次,這樣,縱然這條指令常駐在內存中也是沒用的,事實上程序代碼在系統加載時已經幾乎把所有代碼都放入內存了。JIT機制的作用,就是在程序第一次執行時,把一些估計以後不會有變動的代碼編譯為機器指令,加快速度(這是這類程序第一次啟動時比較慢的原因,但此後卻是飛快的,這種機器指令已經永久化儲存在設備上,下次啟動的不是原來的文本代碼,而是編譯好的機器碼,效率完全是C/C++級別的)。另一個更重要的作用,也是JIT的獨特優勢,這是針對部署在當前設備特定優化的編譯,它比C/C++那種面向普遍機器編譯出來的機器碼更適合當前設備,這用於跨平台,不需要像C/C++那樣重新編譯部署(這實際上是解釋型語言的優勢之一)。有些人在今天,還爭辯說解釋型語言絕對比編譯型慢,那是活在上世紀九十年代以前了。

跨平台的編譯,是在目標設備上部署針對性的編譯器,針對性優化,部署源代碼在不同設備上,看起來是源代碼可移植。C/C++那種,是在開發機器上編譯可在目標設備上執行的機器碼,沒有目標設備的環境,只能按最普遍的情形編譯通用指令,跟前這量身訂造的適合不同。事實上,C/C++換個平台,源代碼的寫法都不一樣,根本沒有想像中的可移植性,靠各種#define指示編譯器按分支編譯特定的源代碼罷了,你還是需要把對應平台獨特的代碼分別寫出來,跟人家那種同一源代碼在不同設備上編譯出不同指令完全不可比。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值