當前位置:首頁 » 編程軟體 » jit編譯起源

jit編譯起源

發布時間: 2023-02-06 18:03:30

Ⅰ JIT是什麼

JIT是准時生產方式(Just In Time簡稱JIT),又稱作無庫存生產方式,零庫存,一個流(或者超級市場生產方式),是日本豐田汽車公司在20世紀60年代實行的一種生產方式,1973年以後,這種方式對豐田公司渡過第一次能源危機起到了突出的作用,後引起其它國家生產企業的重視,並逐漸在歐洲和美國的日資企業及當地企業中推行開來,現在這一方式與源自日本的其它生產、流通方式一起被西方企業稱為「日本化模式」。

Ⅱ jit起源於哪個國家

jit起源於日本。
准時制生產方式(JustInTime簡稱JIT),又稱作無庫存生產方式,零庫存,一個流或者超級市場生產方式。
准時制是日本豐田汽車公司在20世紀60年代實行的一種生產方式,1973年以後,這種方式對豐田公司度過第一次能源危機起到了突出的作用,後引起其它國家生產企業的重視,並逐漸在歐洲和美國的日資企業及當地企業中推行開來,這一方式與源自日本的其它生產、流通方式一起被西方企業稱為「日本化模式」。

Ⅲ 了解什麼叫做jit compiling,與傳統的編譯技術有何不同

java 應用程序的性能經常成為開發社區中的討論熱點。因為該語言的設計初衷是使用解釋的方式支持應用程序的可移植性目標,早期
Java 運行時所提供的性能級別遠低於 C 和
C++
之類的編譯語言。盡管這些語言可以提供更高的性能,但是生成的代碼只能在有限的幾種系統上執行。在過去的十年中,Java
運行時供應商開發了一些復雜的動態編譯器,通常稱作即時(Just-in-time,JIT)編譯器。程序運行時,JIT
編譯器選擇將最頻繁執行的方法編譯成本地代碼。運行時才進行本地代碼編譯而不是在程序運行前進行編譯(用 C 或
C++ 編寫的程序正好屬於後一情形),保證了可移植性的需求。有些 JIT 編譯器甚至不使用解釋程序就能編譯所有的代碼,但是這些編譯器仍然通過在程序執行時進行一些操作來保持 Java 應用程序的可移植性。
由於動態編譯技術的多項改進,在很多應用程序中,現代的 JIT 編譯器可以產生與 C 或 C++
靜態編譯相當的應用程序性能。但是,仍然有很多軟體開發人員認為 —— 基於經驗或者傳聞 ——
動態編譯可能嚴重干擾程序操作,因為編譯器必須與應用程序共享 CPU。一些開發人員強烈呼籲對 Java
代碼進行靜態編譯,並且堅信那樣可以解決性能問題。對於某些應用程序和執行環境而言,這種觀點是正確的,靜態編譯可以極大地提高 Java
性能,或者說它是惟一的實用選擇。但是,靜態地編譯 Java 應用程序在獲得高性能的同時也帶來了很多復雜性。一般的
Java 開發人員可能並沒有充分地感受到 JIT 動態編譯器的優點。

本文考察了 Java 語言靜態編譯和動態編譯所涉及的一些問題,重點介紹了實時 (RT) 系統。簡要描述了 Java
語言解釋程序的操作原理並說明了現代 JIT 編譯器執行本地代碼編譯的優缺點。介紹了 IBM 在 WebSphere Real Time 中發布的
AOT 編譯技術和它的一些優缺點。然後比較了這兩種編譯策略並指出了幾種比較適合使用 AOT
編譯的應用程序領域和執行環境。要點在於這兩種編譯技術並不互斥:即使在使用這兩種技術最為有效的各種應用程序中,它們也分別存在一些影響應用程序的優缺
點。

執行 Java 程序

Java 程序最初是通過 Java SDK 的 javac程序編譯成本地的與平台無關的格式(類文件)。可將此格式看作 Java
平台,因為它定義了執行 Java 程序所需的所有信息。Java 程序執行引擎,也稱作 Java 運行時環境(JRE),包含了為特定的本地平台實現
Java 平台的虛擬機。例如,基於 Linux 的 Intel x86 平台、Sun Solaris 平台和 AIX 操作系統上運行的 IBM
System p 平台,每個平台都擁有一個 JRE。這些 JRE 實現實現了所有的本地支持,從而可以正確執行為
Java 平台編寫的程序。

事實上,操作數堆棧的大小有實際限制,但是編程人員極少編寫超出該限制的方法。JVM 提供了安全性檢查,對那些創建出此類方法的編程人員進行通知。

Java 平台程序表示的一個重要部分是位元組碼序列,它描述了 Java
類中每個方法所執行的操作。位元組碼使用一個理論上無限大的操作數堆棧來描述計算。這個基於堆棧的程序表示提供了平台無關性,因為它不依賴任何特定本地平台
的 CPU 中可用寄存器的數目。可在操作數堆棧上執行的操作的定義都獨立於所有本地處理器的指令集。Java
虛擬機(JVM)規范定義了這些位元組碼的執行(參見 參考資料)。執行 Java 程序時,用於任何特定本地平台的任何 JRE 都必須遵守 JVM
規范中列出的規則。

因為基於堆棧的本地平台很少(Intel X87 浮點數協處理器是一個明顯的例外),所以大多數本地平台不能直接執行 Java 位元組碼。為了解決這個問題,早期的 JRE 通過解釋位元組碼來執行 Java 程序。即 JVM 在一個循環中重復操作:

◆獲取待執行的下一個位元組碼;

◆解碼;

◆從操作數堆棧獲取所需的操作數;

◆按照 JVM 規范執行操作;

◆將結果寫回堆棧。

這種方法的優點是其簡單性:JRE 開發人員只需編寫代碼來處理每種位元組碼即可。並且因為用於描述操作的位元組碼少於 255 個,所以實現的成本比較低。當然,缺點是性能:這是一個早期造成很多人對 Java 平台不滿的問題,盡管擁有很多其他優點。

解決與 C 或 C++ 之類的語言之間的性能差距意味著,使用不會犧牲可移植性的方式開發用於 Java 平台的本地代碼編譯。

編譯 Java 代碼

盡管傳聞中 Java 編程的 「一次編寫,隨處運行」
的口號可能並非在所有情況下都嚴格成立,但是對於大量的應用程序來說情況確實如此。另一方面,本地編譯本質上是特定於平台的。那麼 Java
平台如何在不犧牲平台無關性的情況下實現本地編譯的性能?答案就是使用 JIT 編譯器進行動態編譯,這種方法已經使用了十年(參見圖 1):

圖 1. JIT 編譯器

使用 JIT 編譯器時,Java
程序按每次編譯一個方法的形式進行編譯,因為它們在本地處理器指令中執行以獲得更高的性能。此過程將生成方法的一個內部表示,該表示與位元組碼不同但是其級
別要高於目標處理器的本地指令。(IBM JIT
編譯器使用一個表達式樹序列表示方法的操作。)編譯器執行一系列優化以提高質量和效率,最後執行一個代碼生成步驟將優化後的內部表示轉換成目標處理器的本
地指令。生成的代碼依賴運行時環境來執行一些活動,比如確保類型轉換的合法性或者對不能在代碼中直接執行的某些類型的對象進行分配。JIT
編譯器操作的編譯線程與應用程序線程是分開的,因此應用程序不需要等待編譯的執行。

圖 1 中還描述了用於觀察執行程序行為的分析框架,通過周期性地對線程取樣找出頻繁執行的方法。該框架還為專門進行分析的方法提供了工具,用來存儲程序的此次執行中可能不會改變的動態值。

因為這個 JIT 編譯過程在程序執行時發生,所以能夠保持平台無關性:發布的仍然是中立的 Java 平台代碼。C 和 C++ 之類的語言缺乏這種優點,因為它們在程序執行前進行本地編譯;發布給(本地平台)執行環境的是本地代碼。

挑戰

盡管通過 JIT 編譯保持了平台無關性,但是付出了一定代價。因為在程序執行時進行編譯,所以編譯代碼的時間將計入程序的執行時間。任何編寫過大型 C 或 C++ 程序的人都知道,編譯過程往往較慢。

為了克服這個缺點,現代的 JIT
編譯器使用了下面兩種方法的任意一種(某些情況下同時使用了這兩種方法)。第一種方法是:編譯所有的代碼,但是不執行任何耗時多的分析和轉換,因此可以快
速生成代碼。由於生成代碼的速度很快,因此盡管可以明顯觀察到編譯帶來的開銷,但是這很容易就被反復執行本地代碼所帶來的性能改善所掩蓋。第二種方法是:
將編譯資源只分配給少量的頻繁執行的方法(通常稱作熱方法)。低編譯開銷更容易被反復執行熱代碼帶來的性能優勢掩蓋。很多應用程序只執行少量的熱方法,因
此這種方法有效地實現了編譯性能成本的最小化。

動態編譯器的一個主要的復雜性在於權衡了解編譯代碼的預期獲益使方法的執行對整個程序的性能起多大作用。一個極端的例子是,程序執行後,您非常清楚哪些方
法對於這個特定的執行的性能貢獻最大,但是編譯這些方法毫無用處,因為程序已經完成。而在另一個極端,程序執行前無法得知哪些方法重要,但是每種方法的潛
在受益都最大化了。大多數動態編譯器的操作介於這兩個極端之間,方法是權衡了解方法預期獲益的重要程度。

Java 語言需要動態載入類這一事實對 Java
編譯器的設計有著重要的影響。如果待編譯代碼引用的其他類還沒有載入怎麼辦?比如一個方法需要讀取某個尚未載入的類的靜態欄位值。Java
語言要求第一次執行類引用時載入這個類並將其解析到當前的 JVM
中。直到第一次執行時才解析引用,這意味著沒有地址可供從中載入該靜態欄位。編譯器如何處理這種可能性?編譯器生成一些代碼,用於在沒有載入類時載入並解
析類。類一旦被解析,就會以一種線程安全的方式修改原始代碼位置以便直接訪問靜態欄位的地址,因為此時已獲知該地址。

IBM JIT
編譯器中進行了大量的努力以便使用安全而有效率的代碼補丁技術,因此在解析類之後,執行的本地代碼只載入欄位的值,就像編譯時已經解析了欄位一樣。另外一
種方法是生成一些代碼,用於在查明欄位的位置以前一直檢查是否已經解析欄位,然後載入該值。對於那些由未解析變成已解析並被頻繁訪問的欄位來說,這種簡單
的過程可能帶來嚴重的性能問題。

動態編譯的優點

動態地編譯 Java 程序有一些重要的優點,甚至能夠比靜態編譯語言更好地生成代碼,現代的 JIT 編譯器常常向生成的代碼中插入掛鉤以收集有關程序行為的信息,以便如果要選擇方法進行重編譯,就可以更好地優化動態行為。

關於此方法的一個很好的例子是收集一個特定 array操作的長度。如果發現每次執行操作時該長度基本不變,則可以為最頻繁使用的

array長度生成專門的代碼,或者可以調用調整為該長度的代碼序列。由於內存系統和指令集設計的特性,用於復制內存的最佳通用常式的執行速度通
常比用於復制特定長度的代碼慢。例如,復制 8
個位元組的對齊的數據可能需要一到兩條指令直接復制,相比之下,使用可以處理任意位元組數和任意對齊方式的一般復制循環可能需要 10 條指令來復制同樣的 8

個位元組。但是,即使此類專門的代碼是為某個特定的長度生成的,生成的代碼也必須正確地執行其他長度的復制。生成代碼只是為了使常見長度的操作執行得更快,
因此平均下來,性能得到了改進。此類優化對大多數靜態編譯語言通常不實用,因為所有可能的執行中長度恆定的操作比一個特定程序執行中長度恆定的操作要少得
多。

此類優化的另一個重要的例子是基於類層次結構的優化。例如,一個虛方法調用需要查看接收方對象的類調用,以便找出哪個實際目標實現了接收方對象的虛方法。
研究表明:大多數虛調用只有一個目標對應於所有的接收方對象,而 JIT
編譯器可以為直接調用生成比虛調用更有效率的代碼。通過分析代碼編譯後類層次結構的狀態,JIT
編譯器可以為虛調用找到一個目標方法,並且生成直接調用目標方法的代碼而不是執行較慢的虛調用。當然,如果類層次結構發生變化,並且出現另外的目標方法,
則 JIT
編譯器可以更正最初生成的代碼以便執行虛調用。在實踐中,很少需要作出這些更正。另外,由於可能需要作出此類更正,因此靜態地執行這種優化非常麻煩。

因為動態編譯器通常只是集中編譯少量的熱方法,所以可以執行更主動的分析來生成更好的代碼,使編譯的回報更高。事實上,大部分現代的
JIT
編譯器也支持重編譯被認為是熱方法的方法。可以使用靜態編譯器(不太強調編譯時間)中常見的非常主動的優化來分析和轉換這些頻繁執行的方法,以便生成更好
的代碼並獲得更高的性能。

這些改進及其他一些類似的改進所產生的綜合效果是:對於大量的 Java 應用程序來說,動態編譯已經彌補了與 C 和 C++ 之類語言的靜態本地編譯性能之間的差距,在某些情況下,甚至超過了後者的性能。

缺點

但是,動態編譯確實具有一些缺點,這些缺點使它在某些情況下算不上一個理想的解決方案。例如,因為識別頻繁執行的方法以及編譯這些方法需要時間,所以應用
程序通常要經歷一個准備過程,在這個過程中性能無法達到其最高值。在這個准備過程中出現性能問題有幾個原因。首先,大量的初始編譯可能直接影響應用程序的
啟動時間。不僅這些編譯延遲了應用程序達到穩定狀態的時間(想像 Web
伺服器經
歷一個初始階段後才能夠執行實際有用的工作),而且在准備階段中頻繁執行的方法可能對應用程序的穩定狀態的性能所起的作用也不大。如果 JIT
編譯會延遲啟動又不能顯著改善應用程序的長期性能,則執行這種編譯就非常浪費。雖然所有的現代 JVM
都執行調優來減輕啟動延遲,但是並非在所有情況下都能夠完全解決這個問題。

其次,有些應用程序完全不能忍受動態編譯帶來的延遲。如 GUI 介面之類互動式應用程序就是這樣的例子。在這種情況下,編譯活動可能對用戶使用造成不利影響,同時又不能顯著地改善應用程序的性能。

最後,用於實時環境並具有嚴格的任務時限的應用程序可能無法忍受編譯的不確定性性能影響或動態編譯器本身的內存開銷。

因此,雖然 JIT 編譯技術已經能夠提供與靜態語言性能相當(甚至更好)的性能水平,但是動態編譯並不適合於某些應用程序。在這些情況下,Java 代碼的提前(Ahead-of-time,AOT)編譯可能是合適的解決方案。

AOT Java 編譯

大致說來,Java 語言本地編譯應該是為傳統語言(如 C++ 或
Fortran)而開發的編譯技術的一個簡單應用。不幸的是,Java 語言本身的動態特性帶來了額外的復雜性,影響了 Java
程序靜態編譯代碼的質量。但是基本思想仍然是相同的:在程序執行前生成 Java 方法的本地代碼,以便在程序運行時直接使用本地代碼。目的在於避免
JIT 編譯器的運行時性能消耗或內存消耗,或者避免解釋程序的早期性能開銷。

挑戰

動態類載入是動態 JIT 編譯器面臨的一個挑戰,也是 AOT
編譯的一個更重要的問題。只有在執行代碼引用類的時候才載入該類。因為是在程序執行前進行 AOT
編譯的,所以編譯器無法預測載入了哪些類。就是說編譯器無法獲知任何靜態欄位的地址、任何對象的任何實例欄位的偏移量或任何調用的實際目標,甚至對直接調
用(非虛調用)也是如此。在執行代碼時,如果證明對任何這類信息的預測是錯誤的,這意味著代碼是錯誤的並且還犧牲了 Java 的一致性。

因為代碼可以在任何環境中執行,所以類文件可能與代碼編譯時不同。例如,一個 JVM
實例可能從磁碟的某個特定位置載入類,而後面一個實例可能從不同的位置甚至網路載入該類。設想一個正在進行 bug
修復的開發環境:類文件的內容可能隨不同的應用程序的執行而變化。此外,Java 代碼可能在程序執行前根本不存在:比如 Java
反射服務通常在運行時生成新類來支持程序的行為。

缺少關於靜態、欄位、類和方法的信息意味著嚴重限制了 Java 編譯器中優化框架的大部分功能。內聯可能是靜態或動態編譯器應用的最重要的優化,但是由於編譯器無法獲知調用的目標方法,因此無法再使用這種優化。

內聯

內聯是一種用於在運行時生成代碼避免程序開始和結束時開銷的技術,方法是將函數的調用代碼插入到調用方的函數中。但是內聯最大的益處可能是優化方可見的代碼的范圍擴大了,從而能夠生成更高質量的代碼。下面是一個內聯前的代碼示例:

int foo() { int x=2, y=3; return bar(x,y); }final int bar(int a, int b) { return a+b; }

如果編譯器可以證明這個 bar就是 foo()中調用的那個方法,則 bar中的代碼可以取代 foo()中對
bar()的調用。這時,bar()方法是 final類型,因此肯定是 foo()中調用的那個方法。甚至在一些虛調用例子中,動態 JIT
編譯器通常能夠推測性地內聯目標方法的代碼,並且在絕大多數情況下能夠正確使用。編譯器將生成以下代碼:

int foo() { int x=2, y=3; return x+y; }

在這個例子中,簡化前名為值傳播的優化可以生成直接返回
5的代碼。如果不使用內聯,則不能執行這種優化,產生的性能就會低很多。如果沒有解析
bar()方法(例如靜態編譯),則不能執行這種優化,而代碼必須執行虛調用。運行時,實際調用的可能是另外一個執行兩個數字相乘而不是相加的
bar方法。所以不能在 Java 程序的靜態編譯期間直接使用內聯。

AOT
代碼因此必須在沒有解析每個靜態、欄位、類和方法引用的情況下生成。執行時,每個這些引用必須利用當前運行時環境的正確值進行更新。這個過程可能直接影響
第一次執行的性能,因為在第一次執行時將解析所有引用。當然,後續執行將從修補代碼中獲益,從而可以更直接地引用實例、靜態欄位或方法目標。

另外,為 Java 方法生成的本地代碼通常需要使用僅在單個 JVM 實例中使用的值。例如,代碼必須調用 JVM
運行時中的某些運行時常式來執行特定操作,如查找未解析的方法或分配內存。這些運行時常式的地址可能在每次將 JVM 載入到內存時變化。因此 AOT
編譯代碼需要綁定到 JVM 的當前執行環境中,然後才能執行。其他的例子有字元串的地址和常量池入口的內部位置。

在 WebSphere Real Time 中,AOT 本地代碼編譯通過 jxeinajar工具(參見圖 2)來執行。該工具對 JAR 文件中所有類的所有方法應用本地代碼編譯,也可以選擇性地對需要的方法應用本地代碼編譯。結果被存儲到名為 Java eXEcutable (JXE) 的內部格式中,但是也可輕松地存儲到任意的持久性容器中。

您可能認為對所有的代碼進行靜態編譯是最好的方法,因為可以在運行時執行最大數量的本地代碼。但是此處可以作出一些權衡。編譯的方法越多,代碼佔用的內存
就越多。編譯後的本地代碼大概比位元組碼大 10 倍:本地代碼本身的密度比位元組碼小,而且必須包含代碼的附加元數據,以便將代碼綁定到 JVM
中,並且在出現異常或請求堆棧跟蹤時正確執行代碼。構成普通 Java 應用程序的 JAR
文件通常包含許多很少執行的方法。編譯這些方法會消耗內存卻沒有什麼預期收益。相關的內存消耗包括以下過程:將代碼存儲到磁碟上、從磁碟取出代碼並裝入
JVM,以及將代碼綁定到 JVM。除非多次執行代碼,否則這些代價不能由本地代碼相對解釋的性能優勢來彌補。

圖 2. jxeinajar

跟大小問題相違背的一個事實是:在編譯過的方法和解釋過的方法之間進行的調用(即編譯過的方法調用解釋過的方法,或者相反)可能比這兩類方法各自內部之間
進行的調用所需的開銷大。動態編譯器通過最終編譯所有由 JIT
編譯代碼頻繁調用的那些解釋過的方法來減少這項開銷,但是如果不使用動態編譯器,則這項開銷就不可避免。因此如果是選擇性地編譯方法,則必須謹慎操作以使
從已編譯方法到未編譯方法的轉換最小化。為了在所有可能的執行中都避免這個問題而選擇正確的方法會非常困難。
優點
雖然 AOT 編譯代碼具有上述的缺點和挑戰,但是提前編譯 Java 程序可以提高性能,尤其是在不能將動態編譯器作為有效解決方案的環境中。

可以通過謹慎地使用 AOT 編譯代碼加快應用程序啟動,因為雖然這種代碼通常比 JIT
編譯代碼慢,但是卻比解釋代碼快很多倍。此外,因為載入和綁定 AOT
編譯代碼的時間通常比檢測和動態編譯一個重要方法的時間少,所以能夠在程序執行的早期達到那樣的性能。類似地,互動式應用程序可以很快地從本地代碼中獲
益,無需使用引起較差響應能力的動態編譯。

RT 應用程序也能從 AOT 編譯代碼中獲得重要的收益:更具確定性的性能超過了解釋的性能。WebSphere Real Time
使用的動態 JIT 編譯器針對在 RT 系統中的使用進行了專門的調整。使編譯線程以低於 RT
任務的優先順序操作,並且作出了調整以避免生成帶有嚴重的不確定性性能影響的代碼。但是,在一些 RT 環境中,出現 JIT
編譯器是不可接受的。此類環境通常需要最嚴格的時限管理控制。在這些例子中,AOT
編譯代碼可以提供比解釋過的代碼更好的原始性能,又不會影響現有的確定性。消除 JIT
編譯線程甚至消除了啟動更高優先順序 RT 任務時發生的線程搶占所帶來的性能影響。

優缺點統計

動態(JIT)編譯器支持平台中立性,並通過利用應用程序執行的動態行為和關於載入的類及其層次結構的信息來生成高質量的代碼。但是
JIT
編譯器具有一個有限的編譯時預算,而且會影響程序的運行時性能。另一方面,靜態(AOT)編譯器則犧牲了平台無關性和代碼質量,因為它們不能利用程序的動
態行為,也不具有關於載入的類或類層次結構的信息。AOT 編譯擁有有效無限制的編譯時預算,因為 AOT
編譯時間不會影響運行時性能,但是在實踐中開發人員不會長期等待靜態編譯步驟的完成。

表 1 總結了本文討論的 Java 語言動態和靜態編譯器的一些特性:

表 1. 比較編譯技術

兩種技術都需要謹慎選擇編譯的方法以實現最高的性能。對動態編譯器而言,編譯器自身作出決策,而對於靜態編譯器,由開發人員作出選擇。讓
JIT 編譯器選擇編譯的方法是不是優點很難說,取決於編譯器在給定情形中推斷能力的好壞。在大多數情況下,我們認為這是一種優點。

因為它們可以最好地優化運行中的程序,所以 JIT 編譯器在提供穩定狀態性能方面更勝一籌,而這一點在大量的生產 Java
系統中最為重要。靜態編譯可以產生最佳的互動式性能,因為沒有運行時編譯行為來影響用戶預期的響應時間。通過調整動態編譯器可以在某種程度上解決啟動和確
定性性能問題,但是靜態編譯在需要時可提供最快的啟動速度和最高級別的確定性。表 2 在四種不同的執行環境中對這兩種編譯技術進行了比較:

表 2. 使用這些技術的最佳環境

圖 3 展示了啟動性能和穩定狀態性能的總體趨勢:

圖 3. AOT 和 JIT 的性能對比

使用 JIT 編譯器的初始階段性能很低,因為要首先解釋方法。隨著編譯方法的增多及 JIT
執行編譯所需時間的縮短,性能曲線逐漸升高最後達到性能峰值。另一方面,AOT 編譯代碼啟動時的性能比解釋的性能高很多,但是無法達到 JIT
編譯器所能達到的最高性能。將靜態代碼綁定到 JVM 實例中會產生一些開銷,因此開始時的性能比穩定狀態的性能值低,但是能夠比使用 JIT
編譯器更快地達到穩定狀態的性能水平。

沒有一種本地代碼編譯技術能夠適合所有的 Java
執行環境。某種技術所擅長的通常正是其他技術的弱項。出於這個原因,需要同時使用這兩種編譯技術以滿足 Java
應用程序開發人員的要求。事實上,可以結合使用靜態和動態編譯以便提供最大可能的性能提升 —— 但是必須具備平台無關性,它是 Java
語言的主要賣點,因此不成問題。

結束語

本文探討了 Java 語言本地代碼編譯的問題,主要介紹了 JIT 編譯器形式的動態編譯和靜態 AOT 編譯,比較了二者的優缺點。

雖然動態編譯器在過去的十年裡實現了極大的成熟,使大量的各種 Java 應用程序可以趕上或超過靜態編譯語言(如 C++ 或
Fortran)所能夠達到的性能。但是動態編譯在某些類型的應用程序和執行環境中仍然不太合適。雖然 AOT
編譯號稱動態編譯缺點的萬能解決方案,但是由於 Java 語言本身的動態特性,它也面臨著提供本地編譯全部潛能的挑戰。

這兩種技術都不能解決 Java 執行環境中本地代碼編譯的所有需求,但是反過來又可以在最有效的地方作為工具使用。這兩種技術可以相互補充。能夠恰當地使用這兩種編譯模型的運行時系統可以使很大范圍內的應用程序開發環境中的開發人員和用戶受益。

Ⅳ C#JIT的概念及作用

C#編寫的程序,經過編譯器把編譯後,源代碼被轉換成Microsoft中間語言(MSIL)。MSIL不是真正可執行的代碼。因此,要真正執行MSIL應用程序,還必須使用「JIT編譯器」,對MSIL再次編譯,以得到主機處理器可以真正執行本機指令。JIT編譯器以即時方式編譯MSMIL代碼,以便應用程序執行。

Ⅳ 什麼是JIT

准時生產方式(Just In Time簡稱JIT),是日本豐田汽車公司在20世紀60年代實行的一種生產方式,1973年以後,這種方式對豐田公司渡過第一次能源危機起到了突出的作用,後引起其它國家生產企業的重視,並逐漸在歐洲和美國的日資企業及當地企業中推行開來,現在這一方式與源自日本的其它生產、流通方式一起被西方企業稱為「日本化模式」,其中,日本生產、流通企業的物流模式對歐美的物流產生了重要影響,近年來,JIT不僅作為一種生產方式,也作為一種通用管理模式在物流、電子商務等領域得到推行。
在20世紀後半期,整個汽車市場進入了一個市場需求多樣化的新階段,而且對質量的要求也越來越高,隨之給製造業提出的新課題即是,如何有效地組織多品種小批量生產,否則的話,生產過剩所引起的只是設備、人員、非必須費用等一系列的浪費,從而影響到企業的競爭能力以至生存。在這種歷史背景下,1953年,日本豐田公司的副總裁大野耐一綜合了單件生產和批量生產的特點和優點,創造了一種在多品種小批量混合生產條件下高質量、低消耗的生產方式即准時生產。准時制指的是,將必要的零件以必要的數量在必要的時間送到生產線,並且只將所需要的零件、只以所需要的數量、只在正好需要的時間送到生產。這是為適應20世紀60年代消費需要變得多樣化、個性化而建立的一種生產體系及為此生產體系服務的物流體系。
[編輯本段]
【准時制核心思想】
在准時制生產方式倡導以前,世界汽車生產企業包括豐田公司均採取福特式的「總動員生產方式」,即一半時間人員和設備、流水線等待零件,另一半時間等零件一運到,全體人員總動員,緊急生產產品。這種方式造成了生產過程中的物流不合理現象,尤以庫存積壓和短缺為特徵,生產線或者不開機,或者開機後就大量生產,這種模式導致了嚴重的資源浪費。豐田公司的准時制採取的是多品種少批量、短周期的生產方式,實現了消除庫存,優化生產物流,減少浪費目的。
准時生產方式基本思想可概括為「在需要的時候,按需要的量生產所需的產品」,也就是通過生產的計劃和控制及庫存的管理,追求一種無庫存,或庫存達到最小的生產系統。准時生產方式的核心是追求一種無庫存的生產系統,或使庫存達到最小的生產系統。為此而開發了包括「看板」」在內的一系列具體方法,並逐漸形成了一套獨具特色的生產經營體系。
准時制生產方式以准時生產為出發點,首先暴露出生產過量和其他方面的浪費,然後對設備、人員等進行淘汰、調整,達到降低成本、簡化計劃和提高控制的目的。在生產現場控制技術方面,准時制的基本原則是在正確的時間,生產正確數量的零件或產品,即時生產。它將傳統生產過程中前道工序向後道工序送貨,改為後道工序根據「看板」向前道工序取貨,看板系統是准時制生產現場控制技術的核心,但准時制不僅僅是看板管理。
[編輯本段]
【對生產製造的影響】
1.生產流程化
即按生產汽車所需的工序從最後一個工序開始往前推,確定前面一個工序的類別,並依次的恰當安排生產流程,根據流程與每個環節所需庫存數量和時間先後來安排庫存和組織物流。盡量減少物資在生產現場的停滯與搬運,讓物資在生產流程上毫無阻礙地流動。
「在需要的時候,按需要的量生產所需的產品」。對於企業來說,各種產品的產量必須能夠靈活地適應市場需要量的變比。眾所周知,生產過剩會引起人員、設備、庫存費用等一系列的浪費。避免這些浪費的手段就是實施適時適量生產,只在市場需要的時候生產市場需要的產品。
為了實現適時適量生產,首先需要致力於生產的同步化。即工序間不設置倉庫,前一工序的加工結束後,使其立即轉到下一工序去,裝配線與機械加工幾乎平行進行。在鑄造、鍛造、沖壓等必須成批生產的工序,則通過盡量縮短作業更換時間來盡量縮小生產批量。生產的同步化通過「後工序領取」這樣的方法來實現。 「後工序只在需要的時間到前工序領取所需的加工品;前工序中按照被領取的數量和品種進行生產。」這樣,製造工序的最後一道即總裝配線成為生產的出發點,生產計劃只下達給總裝配線,以裝配為起點,在需要的時候,向前工序領取必要的加工品,而前工序提供該加工品後,為了補充生產被領走的量,必向再前道工序領取物料,這樣把各個工序都連接起來,實現同步化生產。
這樣的同步化生產還需通過採取相應的設備配置方法以及人員配置方法來實現。即不能採取通常的按照車、銑、刨等工業專業化的組織形式,而按照產品加工順序來布置設備。這樣也帶來人員配置上的不同作法:彈性配置作業人數。降低勞動費用是降低成本的一個重要方面,達到這一目的的方法是「少人化」。所謂少人化,是指根據生產量的變動,彈性地增減各生產線的作業人數,以及盡量用較少的人力完成較多的生產。這里的關鍵在於能否將生產量減少了的生產線上的作業人員數減下來。具體方法是實施獨特的設備布置,以便能夠在需求減少時,將作業所減少的工時集中起來,以整頓削減人員。但這從作業人員的角度來看,意味著標准作業中的作業內容、范圍、作業組合以及作業順序等的一系列變更。因此為了適應這種變更,作業人員必須是具有多種技能的「多面手」。
2.生產均衡化
生產均衡化是實現適時適量生產的前提條件。所謂生產的均衡化,是指總裝配線在向前工序領取零部件時應均衡地使用各種零部件,生產各種產品。為此在制定生產計劃時就必須加以考慮,然後將其體現於產品生產順序計劃之中。在製造階段,均衡化通過專用設備通用化和制定標准作業來實現。所謂專用設備通用化,是指通過在專用設備上增加一些工夾具的方法使之能夠加工多種不同的產品。標准作業是指將作業節拍內一個作業人員所應擔當的一系列作業內容標准化。
生產中將一周或一日的生產量按分秒時間進行平均,所有生產流程都按此來組織生產,這樣流水線上每個作業環節上單位時間必須完成多少何種作業就有了標準定額,所在環節都按標準定額組織生產,因此要按此生產定額均衡地組織物質的供應、安排物品的流動。因為JIT生產方式的生產是按周或按日平均,所以與傳統的大生產、按批量生產的方式不同,JIT的均衡化生產中無批次生產的概念。
標准化作業是實現均衡化生產和單件生產單件傳送的又一重要前提。豐田公司的標准化作業主要是指每一位多技能作業員所操作的多種不同機床的作業程序,是指在標准周期時間內,把每一位多技能作業員所承擔的一系列的多種作業標准化。豐田公司的標准化作業主要包括三個內容:標准周期時間、標准作業順序、標准在製品存量,它們均用「標准作業組合表」來表示。
3.資源配置合理化
資源配置的合理化是實現降低成本目標的最終途徑,具體指在生產線內外,所有的設備、人員和零部件都得到最合理的調配和分派,在最需要的時候以最及時的方式到位。
從設備而言,設備包括相關模具實現快速裝換調整,例如,豐田公司發明並採用的設備快速裝換調整的方法是SMED法。豐田公司所有大中型設備的裝換調整操作均能夠在10分鍾之內完成,這為「多品種、小批量」的均衡化生產奠定了基礎。
在生產區間,需要設備和原材料的合理放置。快速裝換調整為滿足後工序頻繁領取零部件製品的生產要求和「多品種、小批量」的均衡化生產提供了重要的基礎。但是,這種頗繁領取製品的方式必然增加運輸作業量和運輸成本,特別是如果運輸不便,將會影響准時化生產的順利進行。合理布置設備,特別是U型單元連結而成的「組合U型生產線」,可以大大簡化運輸作業,使得單位時間內零件製品運輸次數增加,但運輸費用並不增加或增加很少,為小批量頻繁運輸和單件生產單件傳送提供了基礎。
人員而言,多技能作業員(或稱「多面手」)是指那些能夠操作多種機床的生產作業工人。多技能作業員是與設備的單元式布置緊密聯系的。在U型生產單元內,由於多種機床緊湊地組合在一起,這就要求並且便於生產作業工人能夠進行多種機床的操作,同時負責多道工序的作業,如一個工人要會同時操作車床、銑床和磨床等。
[編輯本段]
【人力資源准時制方式的必要性】
實現人力資源的准時制至少可以給企業帶來以下3個方面的好處:
1.減少人員維護成本。企業對內部員工不但要長期支付工資、福利等成本,而且要不斷投入培訓費用以提高和維持員工的各項技能。使用准時制人員,雖然可能一次性支出較大,但從長遠觀點看能節省很多成本。
2.不斷吸收外部信息。通過准時制方式隨時吸引外部人才的加入,能加強企業與外部的交流,及時取得各種有價值的信息,尤其是一些技術發展趨勢方面的情況,往往從其他渠道難以得到。
3.集中力量於核心職能。實踐證明,"大而全,小而全"的企業結構是效率低下的,目前出現的虛擬化管理的趨勢,就是要把企業內部的部分職能逐漸分離出來,由社會或其他組織承擔,從而使企業把非核心因素排除在企業組織之外,集中力量於企業的戰略核心環節。我國進行的企業剝離部分社會職能、高校後勤社會化等一系列改革都體現了這種要求。
【人力資源准時制方式的可行性】
在計劃經濟體制下,人力資源管理的准時制方式是絕不可能實現的,但是隨著市場經濟的深入發展,准時制方式已成為可能,並且將發展成為一種常用的重要的方式。
1.隨著人才市場的發展和完善,人員流動性增強,人才素質提高,從而對外部人才的可獲性增強。烽火獵頭認為眾多的獵頭公司、人才中心、咨詢公司等都是可以利用的渠道,通過與這些公司的長期廣泛聯系,企業可以在需要的時候很容易地得到需要的人才,使准時製成為可能。尤其在我國,勞動力資源豐富的特點為企業採用准時制方式提供了資源保障。
2.用人制度的改革為JIT的實施提供方便。企業與個人之間新型的勞動合同關系消除了終身制的種種弊端,使得企業在用人方面擁有更大的主動性和靈活性。通過簽訂勞動合同,企業可以決定員工的聘用、待遇、績效以及辭退等問題,也可以事先確定員工的服務時間,從而保證了准時制的順利實施。
3.從國外經驗看,准時制在人力資源管理中有著廣泛的應用。在國外,早已出現的人才租賃公司為企業聘用准時制人員提供了幫助。據統計,美國約有20%的中小企業都採用人才租賃的方式,而人才租賃正是准時制一種主要方式。
[編輯本段]
【准時制人員的對象】
按照準時制的基本思想,企業中的任何人員都可能成為准時制管理的對象,只要企業出現人員需要,就要做到准時制。根據企業中各類人員的特點和作用,我們可以把准時制管理的對象分為兩大類:
1.企業迫切需要的核心人員。一般來講,企業的核心人員包括決策人員、管理人員、研究開發人員以及業務開發人員等等。這些核心人員決定了企業的綜合競爭力,對於企業的生存和發展起著關鍵性的作用,他們是企業不可或缺的力量。因此,如果需要這部分人員,就必須及時補充,做到Just In Time.比如,由於業務擴展或人事變動,企業急需業務開發人員,人力資源管理部門就應當做到使所需人員及時到位,否則,將影響企業業務的開展。
有人認為,企業核心人員是企業的中堅力量,不應屬於"隨叫隨到"的准時制人員。這是對准時制本質認識不清的結果,准時制要求在需要的時候提供需要的人員,並不涉及這種需要的時間長短。既然出現了對核心人員的需要,就應當使核心人員准時到位。盡管這類人員是企業長期需要的,而且也相對穩定,但其最初加入企業應當是Just In Time.
2.企業暫時需要的人員。這類人員雖然不構成企業的核心力量,但是他們的可獲性將直接影響企業各項工作的順利進行。這類人員可以是一些急需的專門人才,如產品開發人才、項目開發人才,因為這類人才只為特定產品或項目服務,企業沒有必要長期擁有,因此可採用准時制方式臨時僱傭,尤其對於一些中小企業,自身的技術力量不強,不能吸引或保留高層次技術人才,通過准時制方式獲取外部人才將是一種理想的選擇。另外,企業暫時需要的人員也可能是一些臨時性或季節性工作要求的輔助人員,比如偶爾出現的貨物運輸、季節性的工作量增加,都需要使用准時制人員。由於這部分人員類型多、變動頻繁,因此進行准時制開發的工作量相對較大,必須有科學詳盡的准時制人員規劃。
[編輯本段]
【准時制人員的規劃】
准時制技術的一個重要特點就是嚴格的計劃,為了適時地滿足企業對人員的需要,同時又要消除人員的閑置,即不能靠大量"庫存"來滿足變動的需求,必須做好准時制人員的規劃。一般應根據行業的商業周期或季節性規律,科學預計企業業務的發展變化對人員需求的影響,尤其是對臨時需要人員的影響。
規劃中,首先要確定準時制人員可能擔任的工作清單,清單內容包括工作說明,工作所需的技能、知識,工作所需的方法、工具、設備,工作的質量要求,工作所需的培訓時間及鑒定合格的標准等。然後根據工作清單,採取各種方式如提前招聘、租賃、兼職、顧問等,預先約定準時制人員,一旦需要就立即通知他們前來工作。如果是短期人力需求,工作結束後相應的准時制人員也結束臨時聘用。
為保證准時制人員規劃的順利實施,應當建立詳細的人才資源信息庫,記錄所有可以利用的外部人力資源,比如兼職人員、轉換工作中的人士、精力充沛的退休人員、可以租賃的人才、自由職業者等等,並保持與這些人員的長期聯系。人才庫應當包括人員的特點、技能、愛好、聯系方式、薪資要求等方面的信息,以便為企業預約准時制人員提供參考。
在人力資源開發與管理工作中,准時制既是一種技術,更是一種思想。它要求人力資源管理部門著眼於企業實際需要,周密計劃、嚴格控制,既不能出現人員短缺,也不能有人員的閑置,這是一項非常困難而又很有意義的工作。
【准時制人員的供應商管理模式】
准時制對於供應商的管理需求為零庫存計劃,要求供應商生產物料嚴格按照訂單生產,通過這種方式減少供應商的庫存成本及浪費。從整個供應鏈上面體現出「零庫存」的概念。
[編輯本段]
JAVA領域的JIT
JIT Compiler(Just-in-time Compiler) 即時編譯
最早的Java建置方案是由一套轉譯程式(interpreter),將每個Java指令都轉譯成對等的微處理器指令,並根據轉譯後的指令先後次序依序執行,由於一個Java指令可能被轉譯成十幾或數十幾個對等的微處理器指令,這種模式執行的速度相當緩慢。
針對這個問題,業界首先開發出JIT(just in time)編譯器。當Java執行runtime環境時,每遇到一個新的類別(class:類別是Java程式中的功能群組),類別是Java程式中的功能群組-JIT編譯器在此時就會針對這個類別進行編譯(compile)作業。經過編譯後的程式,被優化成相當精簡的原生型指令碼(native code),這種程式的執行速度相當快。花費少許的編譯時間來節省稍後相當長的執行時間,JIT這種設計的確增加不少效率,但是它並未達到最頂尖的效能,因為某些極少執行到的Java指令在編譯時所額外花費的時間可能比轉譯器在執行時的時間還長,針對這些指令而言,整體花費的時間並沒有減少。
基於對JIT的經驗,業界發展出動態編譯器(dynamic compiler),動態編譯器僅針對較常被執行的程式碼進行編譯,其餘部分仍使用轉譯程式來執行。也就是說,動態編譯器會研判是否要編譯每個類別。動態編譯器擁有兩項利器:一是轉譯器,另一則是JIT,它透過智慧機制針對每個類別進行分析,然後決定使用這兩種利器的哪一種來達到最佳化的效果。動態編譯器針對程式的特性或者是讓程式執行幾個循環,再根據結果決定是否編譯這段程式碼。這個決定不見得絕對正確,但從統計數字來看,這個判斷的機制正確的機會相當高。事實上,動態編譯器會根據「歷史資料」做決策,所以程式執行的時間愈長,判斷正確的機率就愈高。以整個結果來看,動態編譯器產生的程式碼執行的速度超越以前的JIT技術,平均速度可提高至50%。
JIT 頁面渲染引擎
JIT 頁面渲染是 COMSHARP CMS 為了實現網站內容即時更新而開發的頁面生成技術,JIT頁面渲染引擎直接從資料庫獲取網站最新內容,瞬間生成頁面輸出給訪問者,並通過 URL 轉寫技術實現純靜態地址。JIT 頁面渲染技術是針對傳統 CMS 生成靜態 HTML 文件而言。傳統 CMS 由於使用腳本代碼模板技術,頁面生成前,需要將資料庫中的頁面內容用外部模板進行解析與渲染,導致嚴重的性能問題,為了解決這個問題,傳統 CMS 一般採用生成 HTML 靜態文件技術,即,在內容創作完成後,對全站的內容執行一個靜態 HTML 文件生成過程,最終,全站內容以靜態 HTML 文件的形式存在。
靜態 HTML 文件技術最顯著的優勢是性能出眾,然而這種技術最嚴重的問題在於,用戶對站點任何修改與更新,必須首先經過一次全站 HTML 文件重新生成過程,然後才能被訪問者看到。根據不同 CMS 產品的性能和站點規模,這個 HTML 生成過程可能長到十幾分鍾到幾十分鍾或更長。也有個別 CMS 產品使用觸發式頁面渲染模式,即內容更新後,並不立即生成 HTML 文件,而是在用戶第一次訪問該頁面時,觸發生成該頁面的 HTML 文件,這種技術的問題在於,用戶第一次訪問被更新頁面的時候,可能經歷非常漫長的等待,因為站點內各個頁面之間並非孤立的,他們可能相互引用,雖然訪問的只是一個頁面,為了對引用頁面同步更新,需要重新生成 HTML 文件的頁面可能有多個。
JIT 頁面渲染如何工作?
下圖,是 COMSHARP CMS JIT 渲染引擎與傳統 CMS 生成 HTML 靜態頁面模式對比。可以看出,JIT 渲染引擎直接將網站最新內容從資料庫渲染給訪問用戶,而傳統 CMS 的站點內容在到達訪問用戶之前,首先要經歷一個 HTML 的轉換過程。
COMSHARP CMS JIT 頁面渲染如何實現毫秒級的渲染速度?
COMSHARP CMS 在頁面渲染的時候,JIT 引擎可以在數十毫秒的時間內容完整整個頁面的生成,這樣就保證用戶訪問的時候,不會因 JIT 渲染造成延遲。事實上,COMSHARP CMS 網站訪問速度只取決於伺服器帶寬,頁面生成過程帶來的延遲可以忽略不計。
我們有兩項技術保證這樣的性能:
編譯級主題模板
COMSHARP CMS 的編譯級主題模板直接內嵌在系統的 DLL 中,主題模板的套用是在運行時(Run Time)完成,這和傳統 CMS 的調用腳本代碼模板解釋運行是截然不同。
調用 .NET 核心函數完成頁面渲染(繞開 ASP.NET Webform 生命周期)
我們知道,.NET 框架內核性能是非常出色的,然而,ASP.NET Webform 卻以效率低下而受到詬病。ASP.NET Webform 效率低下的主要原因,是微軟為了在 Web 上實現類似 Winform 的開發體驗而設計的一套機制,這套機制包含一個完整的 ASP.NET Webform 生命周期,Webform 從接受訪問請求到輸出頁面內容,要經歷一個周期,這個周期的存在是為了讓開發者插入各種處理邏輯,這個 Webform 生命周期的效率並不理想。
為了解決這個問題,COMSHARP CMS 拋棄了 ASP.NET Webform 模式,而是直接調用 .NET 核心函數完成頁面的輸出,繞過 Webform 的生命周期,顯著得提高了 COMSHARP CMS 頁面的生成速度,並將速度提升到毫秒級。

Ⅵ JIT起源於哪個國家

JIT(JIT,Just in time)准時制,起源於日本的豐田汽車公司
其實質是保持物質流和信息流在生產中的同步,實現以恰當數量的物料,在恰當的時候進入恰當的地方,生產出恰當質量的產品。這種方法可以減少庫存,縮短工時,降低成本,提高生產效率。

Ⅶ java中的JIT編譯到底是什麼意思

在JIT編譯器生成本機代碼後,它會重寫存根常式,插入一個jmp指令跳轉到剛才JIT編譯器的代碼。只有當要調用某個方法時,JIT編譯器才會將CIL的方法體編譯為相應的本機機器碼版本。這樣可以優化程序的工作集。

Ⅷ jit的含義是什麼

jit是just in time的縮寫,常用的有兩個領域,一個是工業中的准時生產系統,一個編程中即時編譯編譯器的縮寫。

准時生產方法是指生產的產品能夠精準地滿足客戶在時間、質量和數量上的需求,無論客戶是產品的最終用戶還是處於生產線上的其他流程。採用JIT時,配送到生產現場的部件和材料正如生產所需,企業不會為防止發生配送延遲的情況而儲備材料和部件。

工業准時生產方法的核心

准時生產方法就是強調企業生產產品的時候,應該完全按照客戶的需求來生產,客戶什麼時間需要,就什麼時間生產出來,客戶需要什麼品種,就生產什麼品種,客戶需要多大量,就生產多大量,如果真正能做到這種程度,意味著企業生產出的產品馬上就可以轉移出去。

所以這種方法的核心就是按需生產,如果能實現按需生產,伴隨著產品及時地轉移,企業的存貨庫存就會不斷降低,伴隨著存貨的不斷降低,企業有關的成本也就會不斷降低。

Ⅸ 谷歌JIT是什麼

JIT是指JAVA領域的JIT
JIT Compiler(Just-in-time Compiler) 即時編譯
最早的Java建置方案是由一套轉譯程式(interpreter),將每個Java指令都轉譯成對等的微處理器指令,並根據轉譯後的指令先後次序依序執行,由於一個Java指令可能被轉譯成十幾或數十幾個對等的微處理器指令,這種模式執行的速度相當緩慢。 針對這個問題,業界首先開發出JIT(just in time)編譯器。當Java執行runtime環境時,每遇到一個新的類別(class:類別是Java程式中的功能群組),類別是Java程式中的功能群組-JIT編譯器在此時就會針對這個類別進行編譯(compile)作業。經過編譯後的程式,被優化成相當精簡的原生型指令碼(native code),這種程式的執行速度相當快。花費少許的編譯時間來節省稍後相當長的執行時間,JIT這種設計的確增加不少效率,但是它並未達到最頂尖的效能,因為某些極少執行到的Java指令在編譯時所額外花費的時間可能比轉譯器在執行時的時間還長,針對這些指令而言,整體花費的時間並沒有減少。 基於對JIT的經驗,業界發展出動態編譯器(dynamic compiler),動態編譯器僅針對較常被執行的程式碼進行編譯,其餘部分仍使用轉譯程式來執行。也就是說,動態編譯器會研判是否要編譯每個類別。動態編譯器擁有兩項利器:一是轉譯器,另一則是JIT,它透過智慧機制針對每個類別進行分析,然後決定使用這兩種利器的哪一種來達到最佳化的效果。動態編譯器針對程式的特性或者是讓程式執行幾個循環,再根據結果決定是否編譯這段程式碼。這個決定不見得絕對正確,但從統計數字來看,這個判斷的機制正確的機會相當高。事實上,動態編譯器會根據「歷史資料」做決策,所以程式執行的時間愈長,判斷正確的機率就愈高。以整個結果來看,動態編譯器產生的程式碼執行的速度超越以前的JIT技術,平均速度可提高至50%。

谷歌JIT應該是谷歌手機裡面操作系統裡面的一個程序文件。

Ⅹ JⅰtDebUggⅰng是什麼意思

JIT Debugging
也就是JIT調試的意思
JIT編譯(just-in-time compilation),狹義來說是當某段代碼即將第一次被執行時進行編譯,因而叫「即時編譯」。JIT編譯是動態編譯的一種特例。JIT編譯一詞後來被泛化,時常與動態編譯等價;但要注意廣義與狹義的JIT編譯所指的區別。

熱點內容
qq群里上傳的文件怎麼刪除 發布:2024-04-24 22:13:21 瀏覽:357
途岳配置升級了什麼 發布:2024-04-24 21:55:55 瀏覽:886
刷機安卓10狀態欄圓角如何修復 發布:2024-04-24 21:24:00 瀏覽:135
創建sql資料庫的命令是什麼 發布:2024-04-24 21:23:58 瀏覽:43
不是安卓該如何下載畫質怪獸 發布:2024-04-24 21:18:51 瀏覽:701
php載入網頁 發布:2024-04-24 21:15:20 瀏覽:161
遠程伺服器更換ip地址 發布:2024-04-24 21:14:43 瀏覽:528
什麼時候上線華為方舟編譯器軟體 發布:2024-04-24 21:10:21 瀏覽:631
安卓布局文件指的是哪個 發布:2024-04-24 21:08:05 瀏覽:889
磁帶存儲價格 發布:2024-04-24 21:04:22 瀏覽:902