您好,登錄后才能下訂單哦!
本篇內容介紹了“Java HotSpot性能引擎的體系結構有哪些知識點”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1. 引言
Java>TM平臺正在成為軟件開發和部署的主流載體。在許多領域,Java平臺的使用率正在迅猛增長--從信用卡到大型計算機、從網頁applets到大型商務應用程序。因此,Java技術的品質、成熟度和性能就成了對每一個開發人員和用戶至關重要的因素。Sun Microsystems,Inc.正在重點投資于能夠在許多處理器和操作系統面前"抬起擋路的欄桿"的技術,應用這種技術,軟件開發人員可以將基于Java的應用程序,在不考慮處理器和操作系統的情況下有效而可靠地運行。
人們對Java平臺感興趣的一個主要原因是:基于Java技術的程序與用傳統語言編寫的程序不同,它們是以一種可移植的和安全的形式而分布的。過去,使用可移植的分布形式一般來說都意味著在程序執行中的性能要下降。通過采用現代動態編譯技術,這種性能的下降得以減緩,其本質可說是"雙收其利"。
舉一個簡單但很重要的例子:我們可以使一個Java技術編譯器為特定版本的處理器"在運行中"生成優化的機器碼(例如,盡管奔騰和奔騰II處理器可以運行相同的機器碼,但沒有一種形式的機器碼可以同時對上述二者都是優化的)。于是,Java編程語言的字節碼分布形式不僅可以提供移植性,而且實際上還可以為性能的提高提供新的機會。
本文將介紹Java的第二代性能技術--Java HotSpot性能引擎。Java HotSpot性能引擎幾乎在其設計的每一個領域都有創新,它使用了廣泛的可用來提高性能的技術;這包括可檢測并加速性能關鍵性(performance-critical)代碼"在運行中"的適配性優化技術。Java HotSpot還提供了超快速(ultra-fast)線程同步,以獲取線程安全的基于Java技術的程序的最大性能;它還提供了垃圾回收器(GC),GC不僅特別快,而且是完全"精確"的(因而也更可靠);另外,采用最新技術的算法也減少或消除了用戶對垃圾回收而引起的暫停的感覺。最后,由于Java HotSpot性能引擎在源代碼級是以一種簡潔、高級的面向對象的設計風格編寫的,因而還進一步改善了維護性和擴展性。
2. 概述
下面是Java HotSpot性能引擎的主要結構性優勢:
1) 更好的一般性能
無句柄對象(為提高速度,對象的引用被實現為直接指針);
更快的Java編程語言的線程同步;
為達到更快的C代碼的調出和調入,C和Java代碼可共享相同的激活棧;
與及時編譯JIT相比較,大大減小了代碼空間和啟動時間總開銷。
2) 最利于繁殖的(best-of-breed)性能
為獲得真本地代碼性能,優化了本地代碼編譯器;
適配性的"熱點(Hot Spot)"檢測主要集中于性能-關鍵性代碼的優化上,從而大大減少了總編譯時間和對已編譯代碼的內存需求;
方法內嵌技術為大部分程序消除了大多數動態方法調用;
對非內嵌方法的更快的方法調用。
3) 精確的、相繼的(generational)復制垃圾回收器
更快的對象分配;
精確性提供了更準確的對象回收(與保守的(conservative)或半精確的(partially-accurate)那種可引起難以預料的內存泄漏的回收器不同);
相繼回收對大多數程序來說極大地提高了回收效率;
對大多數程序來說, 相繼回收還極大地減小了回收"舊的對象"而引起暫停所出現的頻率;
相繼回收也為使用大量"活的(live)"對象的內存的應用程序極大地改善了性能擴展性;
使用標記-整理(mark-compact)算法來回收"舊的"對象,消除了內存碎 片,增加了本地性(locality);
增量"無暫停"垃圾回收器為"長壽"對象、甚至為極大量的"活"的對象在實質上消除了對象回收過程中出現的用戶可視的暫停,這對等待時間敏感的應用程序(如服務器)以及大數據量的程序來說是理想的;
4) 先進的高級設計
透明調試和簡檔(profiling)語意--Java HotSpot體系結構能夠使本地代碼的生成及優化對程序員完全透明,它可以按照純字節碼語意提供全部簡檔和調試信息,而不管內部實際上所用的優化方法。
3. 體系結構 Java HotSpot性能引擎的體系結構使多年來在Sun Microsystems的實驗室里所做的研究達到了頂點。它綜合采用了具有最新技術水平的內存模型、垃圾回收器和適配性優化器;并且它是以一種特別高級的和面向對象的風格寫成的。
以下部分將介紹Java HotSpot性能引擎的重要的體系結構及其特性。
4. 內存模型
4.1 無句柄對象
Java 2 軟件開發工具包(SDK)使用間接句柄來表示對象的引用。雖然在垃圾回收過程中,這樣做會使對象的重新定位變得更加簡單,但這會引發一個重要的性能瓶頸,因為大多數對Java編程語言對象的實例變量的訪問都需要兩個層次的間接引用。Java HotSpot性能引擎消除了句柄的概念:對象的引用被實現為直接指針,從而可提供對實例變量的C-速度訪問。垃圾回收器則負責在內存被回收過程中,當對象被重新定位時,尋找并更新所有對在適當位置上的對象的引用。
4.2 雙字(Tow-word)對象頭
Java HotSpot性能引擎使用雙機器-字對象頭,而不是象Java 2 SDK那樣使用三字對象頭。由于平均的Java編程語言的對象尺寸較小,因而這種技術對節省空間產生了重要作用(大約節省了8%的堆的大小)。第一個對象頭的字包含了身份標識哈希碼和GC狀態等信息;第二個對象頭的字是一個對對象的類的引用。只有數組才有第三個對象頭字段,它是用來表示數組大小的。
4.3 將映射數據表示為對象
類、方法以及其它內部映射數據被直接表示為堆上的對象(盡管這些對象也許不能被基于Java技術的程序所直接訪問)。這不僅簡化了內存模型,而且使你可以采用與回收其它Java編程語言對象相同的垃圾回收器來回收這類映射數據。
4.4 本地線程支持,包括任務搶先和多重處理技術
每個線程方法的激活棧是使用宿主操作系統的線程模型來表示的。Java編程語言方法和本地方法可共享相同的棧,從而可允許在C和Java編程語言間的快速調用。使用宿主操作系統的線程調度機制可支持全搶先的Java編程語言線程。
使用本地操作系統的線程和調度機制的一個主要優點是,它能夠透明地利用本地操作系統支持多重處理。由于Java HotSpot性能引擎被設計為對在執行Java編程語言代碼時的搶先和/或多重處理引起的競爭狀態是不敏感的,因而Java編程語言線程將自動利用由本地操作系統所提供的任意調度機制和處理器分配策略。
5. 內存垃圾回收
5.1 背景說明
Java編程語言對程序員的一個主要魅力在于,它是第一個可提供內置自動內存管理(或內存垃圾回收)的主流編程語言。在傳統語言中,一般都使用顯式分配/釋放模型來進行動態內存分配。事實證明, 這不僅是造成內存泄漏、程序錯誤以及用傳統語言編寫的程序崩潰的最主要原因之一,而且還是提高性能的瓶頸, 并且是形成模塊化和可再使用代碼的主要障礙(如果沒有顯式和難以理解的模塊間的協同操作,在模塊界限間確定釋放點有時幾乎是不可能的)。在Java編程語言中,垃圾回收也是支持安全性模型所必需的所謂"安全地"執行這一語義的重要組成部分。
當一個垃圾回收器能夠"證明"某個對象對正在運行的程序來說是不可訪問的時候,它僅通過回收該對象就可自動地在后臺處理對該對象的內存的"釋放"。這種自動的處理過程不僅完全消除了由于釋放太少而引起的內存泄漏,同時也消除了由于釋放太多而引起的程序崩潰和難以發現的引用錯誤。
從傳統上講,相對于顯式釋放模型來說, 垃圾回收一直被認為是一種沒有效率且會引起性能下降的處理過程。事實上,使用現代垃圾回收技術,可大大改善性能,且這種性能實際上要比由顯式釋放所提供的性能好得多。
5.2 Java HotSpot垃圾回收器
Java HotSpot性能引擎具有一個先進的垃圾回收器,它除了包含以下將要描述的先進技術特性外,還充分利用了簡潔和面向對象的設計優勢,提供了一個高層次的垃圾收集結構框架,這個框架可被輕松地配置、使用或擴展以使用新的回收算法。
以下將介紹Java HotSpot垃圾回收器的的主要特性。總體來講,所用各種技術的綜合結果無論是對需要盡可能高的性能的應用程序來說,還是對不期望有由于碎片而引起內存泄漏和內存不可訪問的長時運行應用程序來說,都是較好的。Java HotSpot性能引擎不僅能夠提供具有最新技術水平的垃圾回收器性能,而且可以保證全部內存回收,并完全消除內存碎片。
5.3 精確性
Java HotSpot垃圾回收器是一種全精確回收器, 與之形成對比的是, 許多垃圾回收器都是保守的(conservative)或半精確的(partially-accurate)。雖然保守的垃圾回收由于易于增加到一個不支持垃圾回收的系統中, 因而具有一定的吸引力, 但它卻有一定的缺陷。
一個保守的垃圾回收器不能確切地斷定所有對象的引用的分布位置, 其結果是, 它必須保守地假設那些看似要引用一個對象的內存字(memory word)是事實上的對象引用。這就意味著它可能導致某種錯誤, 例如將一個整數誤認為是一個對象指針; 這會造成一些負面影響。首先, 當發生這樣的錯誤時(實際并不普遍), 內存泄漏會不可預知地以一種對應用程序員來說實質上不可再生(reproduce)或調試(debug)的方式出現(盡管由虛懸(dangling)對象引用所引起的崩潰仍可被預防, 并且如果有足夠的備份內存, 該程序仍可正確執行);第二, 由于它可能已經導致了某個錯誤, 因而一個保守的回收器必須使用句柄來間接引用對象(降低性能), 或者避免重新定位對象;因為重新定位無句柄對象需要更新所有對對象的引用, 這在回收器不能確切地斷定一個表面上的引用就是一個真的引用時, 是不可能做到的。不能重新定位對象將會導致對象內存碎片, 且更重要的是, 它會妨礙使用以下描述的先進的相繼復制回收算法。
因為Java HotSpot回收器是全精確的, 因而它可以提供幾個有力的設計保證, 這在保守的回收器上是不可能提供的: · 所有不可訪問的對象內存都可以被可靠地回收;
· 所有對象都可以被重新定位, 因而可對對象內存的進行整理;這就消除了對象內存的碎片并增加了內存的本地性。
5.4 相繼的復制回收
Java HotSpot性能引擎采用了具有先進技術的相繼復制回收器,它有兩個主要優點:
· 與Java 2 SDK相比,為大部分程序較大地提高了分配速度和總的垃圾回收效率(通常提高了5倍);
· 相應地減小了用戶可感覺的垃圾回收時的"暫停"所出現的頻率。
相繼回收器利用了在大部分程序中大多數對象(通常為95%)都是非常短命的也就是被用作臨時數據結構這樣一個事實,通過將新創建的對象隔離到一個對象"幼稚園(nursery)"中,一個相繼回收器可以完成以下幾件事:第一,因為在對象幼稚園中,新的對象就象堆棧那樣被一個接一個地分配,因而分配變得特別的快,因為這樣它僅涉及單個指針的更新及對幼稚園溢出的單個檢查。第二,到幼稚園溢出時,大部分幼稚園中的對象已經"死了",這就使垃圾回收器可以只簡單地將幼稚園中極少數存活的對象移到別處就可以了,從而不必對幼稚園中死去的對象做回收工作。
5.5 采用標記-整理算法的"舊對象"回收器
盡管相繼的復制回收器可以有效地回收大部分死的對象,但較長壽命的對象仍然在"舊對象"內存區不斷地堆積。從內存不足狀態或程序要求的角度考慮,有時必須執行對舊對象的垃圾回收。Java HotSpot性能引擎可以使用一種標準的標記-整理回收算法,它從"根"開始遍歷活對象的全部圖解,然后掃描內存并整理回收由死的對象遺留的縫隙。通過整理回收堆中的縫隙(而不是將它們回收到一個釋放清單中),可消除內存碎片;由于消除了釋放清單搜索,則舊對象的分配將是更合理的。
5.6 增量"無暫停"垃圾回收器
標記-整理回收器不能消除所有用戶可感覺的暫停, 用戶可感覺的垃圾回收暫停是在 "舊的"對象(在機器術語中指已經 "活" 了一段時間的對象)需要做垃圾收集時出現的, 而且這種暫停與現存的活的對象的數據量成比例。這就意味著當有較多數據被處理時, 該暫停可能是任意大的; 這對服務器應用程序、動畫或其它軟實時應用程序來說,是一種非常不好的的表現。
Java HotSpot性能引擎提供了另一種使用的舊空間垃圾回收器以解決這一問題。該回收器是全增量的, 它消除了用戶可探察的垃圾回收暫停。該增量回收器可平滑地按比例增加,即使在處理特大的對象數據集時,也可以提供相對不變的暫停時間。這為如下應用程序創造了極佳的表現:
服務器應用程序, 特別是高可用性的應用程序;
處理非常大的 "活的"對象的數據集的應用程序;
不期望有用戶可注意到的暫停的應用程序, 如游戲、動畫或其它高交互性的應用程序。
無暫停回收器采用的是一種增量舊空間回收方案, 學術上稱該方案為"列車(train)"算法。該算法是將舊空間回收時的暫停分離為許多微小的暫停(典型的暫停小于10毫秒), 然后將這些微小的暫停隨著時間散布開來, 于是, 實際上的程序對用戶來講,就象是沒有暫停一樣。由于列車算法不是一個硬實時(hard-real time)算法, 因而它不能保證暫停次數的上限。然而, 實際上特大量的暫停是極罕見的, 并且它們不是由大的數據集直接引起的。
作為一種人們十分歡迎的有益的副產品, 無暫停回收還可以改善內存本地性。因為該算法試圖將緊密 "耦合的(coupled)"對象組重新定位到相鄰的內存區域中, 從而可以為這些對象提供最好的內存分頁和高速緩存本地性之屬性。這對操作不同的對象數據集的多線程應用程序來說, 也是非常有益的。 6. 超快速線程同步
Java 編程語言的另一個重要的誘人之處,是它提供了一種語言級的線程同步。這就使得編寫帶有精細的線程同步加鎖的多線程程序變得十分簡單。然而不幸的是,目前的同步實現相對于其它Java編程語言中的微操作來說,效率非常底,它使精細的同步的操作變成了性能主要的瓶頸。
Java HotSpot性能引擎在線程的同步實現上取得了突破,它極大地促進了同步性能的提高。其結果是使同步性能變得如此之快,以至于對大多數現實世界的程序來說,它已經不是一個重要的性能問題了。
除了在"內存模型"一節中提到的在空間方面的益處之外,同步機制通過為所有無競爭的同步(它動態地由絕大多數同步所構成)提供超快速和常數-時間(constant-time)性能, 從而也提供了它的在性能方面的益處。
Java HotSpot同步實現完全適合于多重處理并應該展示出色的多處理器性能特征。
7. Java HotSpot編譯器
7.1 背景說明
Java編程語言是一種新的具有獨特性能特征的編程語言。迄今為止,大部分試圖提高其性能的嘗試都集中在如何應用為傳統語言開發的編譯技術上。及時編譯器是基本的快速傳統編譯器,它可以"在運行中"將Java字節碼轉換為本地機器代碼。及時編譯器在終端用戶的實際執行字節碼的機器上運行,并編譯每一個被首次執行的方法。
在JIT編譯中存在著幾個問題。首先,由于編譯器是在"用戶時間"內運行于執行字節碼的機器上,因此它將受到編譯速度的嚴格限制:如果編譯速度不是特別快,則用戶將會感到在程序的啟動或某一部分的明顯的延遲。這就不得不采取一種折衷方案,用這種折衷方案將很難進行最好的優化,從而將會大大地降低編譯性能。
其次,即使JIT有時間進行全優化,這樣的優化對Java編程語言來說,也比對傳統語言(如C和C++)的優化效果要差。這有以下幾個原因:
Java編程語言是動態"安全的",其含義是保證程序不違反語言的語義或直接訪問非結構化內存。這就意味著必須經常進行動態類型測試, 例如,當轉型時(casting)和向對象數組進行存儲時。
Java編程語言在"堆(heap)"上對所有對象進行分配,而在C++中,許多對象是在棧(stack)上分配的。這就意味著Java編程語言的對象分配效率比C++的對象分配效率要高得多。除此之外,由于Java編程語言是垃圾回收式的,因而它比C++有更多的不同類型的內存分配開銷(包括潛在的垃圾清理 (scavenging)和編寫-隔離(write-barrier)開銷)。
在Java編程語言中,大部分方法調用是"虛擬的"(潛在是多態的),這在C++中很少見。這不僅意味著方法調用的性能更重要,而且意味著更難以為方法調用而執行靜態編譯器優化(特別是象內嵌方法(inlining)那樣的全局優化)。大多數傳統優化在調用之間是最有效的,而Java編程語言中的減小的調用間距離可大大降低這種優化的效率,這是因為它們使用了較小的代碼段的緣故。
基于Java技術的程序由于其強大的動態類裝載的能力,因而可"在運行中"發生改變。這就使得它特別難于進行許多類型的全局優化,因為編譯器不僅必須能夠檢測這些優化何時會由于動態裝載而無效,而且還必須能夠在程序執行過程中解除和/或重做這些優化,且不會以任何形式損壞或影響基于Java技術的程序的執行語義(即使這些優化涉及棧上的活動方法)。
上述問題的結果是使得任何試圖獲取Java編程語言的先進性能的嘗試,都必須尋求一種非傳統的解決方案,而不是盲目地應用傳統編譯器技術。
Java HotSpot性能引擎的體系結構通過使用適配性的優化技術,解決了以上所提出的Java編程語言的性能問題。適配性的優化技術是Sun公司的研究機構Self小組多年以來在面向對象的語言實現上的研究成果。
7.2 熱點Hot Spot檢測
適配性的優化技術利用了大多數程序的有趣的屬性,解決了JIT編譯問題。實際上,所有程序都是花費了它們的大部分時間而執行了它們中的很小一部分代碼。Java HotSpot性能引擎不是在程序一啟動時就對整個程序進行編譯,而是在程序一啟動時就立即使用解釋器(interpreter)運行該程序,在運行中對該程序進行分析以檢測程序中的關鍵性"熱點(Hot Spot)",然后,再將全局本地碼(native-code)優化器集中在這些熱點上。通過避免編譯(大部分程序的)不常執行的代碼,Java HotSpot編譯器將更多的注意集中于程序的性能關鍵性部分,因而不必增加總的編譯時間。這種動態監測隨著程序的運行而不斷進行,因而,它可以精確地"在運行中"調整它的性能以適應用戶的需要。
這種方法的一個巧妙而重要的益處是,通過將編譯延遲到代碼已被執行一會兒之后("一會兒"是指機器時間,而不是用戶時間!),從而可在代碼被使用的過程中收集信息,并使用這些信息進行更智能的優化。除收集程序中的熱點信息外,也收集其它類型的信息,如與"虛擬"方法調用有關的調用者-被調用者的關系數據等。
7.3 方法內嵌
正象在"背景說明"中所提到的,Java編程語言中的"虛擬"方法調用的出現頻率,是一個重要的妨礙優化的瓶頸。當Java HotSpot適配性優化器在執行過程中,一旦回收了有關程序"熱點"的信息后,它不僅能將這些"熱點"編譯為本地代碼,而且還可以執行內嵌在這些代碼上的大量的方法。
內嵌具有重要的益處。它極大地減小了方法調用的動態頻率,這就節省了執行這些方法調用所需要的時間。而更重要的是,內嵌為優化器生成了大得多的代碼塊。這種狀態可以大大地提高傳統編譯器的優化技術的效率,從而消除提高Java編程語言性能的障礙。
內嵌對其它代碼的優化起到了促進作用,它使優化的效率大大提高。隨著Java HotSpot編譯器的進一步成熟,操作更大的內嵌代碼塊的能力將使實現更先進的優化技術成為可能。
7.4 動態逆優化
盡管上述內嵌是一種非常重要的優化方法,但對于象Java編程語言那樣的動態的面向對象的編程語言來說,這在傳統上一直是非常難以實現的。此外,盡管檢測"熱點"和內嵌它們所調用的方法已經十分困難,但它仍然還不足以提供全部的Java編程語言的語義。這是因為,用Java編程語言編寫的程序不僅能夠"在運行中"改變方法調用的模式,而且能夠為一個運行的程序動態地裝載新的Java代碼。
內嵌是基于全局分析的,動態裝載使內嵌更加復雜了,因為它改變了一個程序內部的全局關系。一個新的類可能包含了需要被內嵌在適當位置的新的方法。所以,Java HotSpot性能引擎必須能夠動態地逆優化(如果需要,然后再重新優化)先前已經優化過的"熱點",甚至在"熱點"代碼的執行過程中進行這種操作。沒有這種能力,一般的內嵌將不能在基于Java的程序上安全地執行。
7.5 優化編譯器
只有性能關鍵性代碼才被編譯,這就"購買了時間",并可將這些時間用于更好的優化。Java HotSpot性能引擎使用全優化編譯器,以此替代了相對簡單的JIT編譯器。全優化編譯器可執行所有第一流的優化。例如:死代碼刪除、循環非變量的提升、普通子表達式刪除和連續不斷的傳送(constant propagation)等。它還賦予優化某些特定于Java技術的性能。如:空-檢查(null-check)和值域-檢查(range-check)刪除等。寄存器分配程序(register allocator)是一個用顏色表示分配程序的全局圖形,它充分利用了大的寄存器集(register sets)。Java HotSpot性能引擎的全優化編譯器的移植性能很強,它依賴相對較小的機器描述文件來描述目標硬件的各個方面。盡管編譯器采用了較慢的JIT標準,但它仍然比傳統的優化編譯器要快得多。而且,改善的代碼質量也是對由于減少已編譯代碼的執行次數而節省的時間的一種"回報"。
7.6 小結
綜上所述,我們可以對Java HotSpot適配性優化器的作用做如下小結:
一般來說,程序啟動得更快。這是因為,與JIT編譯器相比,預先編譯做得較少的緣故。
編譯過程隨著時間展開,從而使編譯暫停時間更短,更不被用戶所注意。
僅編譯性能關鍵性代碼的做法"購買了時間",從而可將這些時間用在執行更好的優化上。
由于編譯較少的代碼, 編譯代碼所需的內存較少.
通過使編譯代碼前的等待時間變得長一點,可收集信息以執行更好的優化,如內嵌,這種技術將具有深遠的意義。
通過高度優化性能關鍵性代碼,使重要的代碼的運行速度更快。
7.7 對軟件可重用性(reusability)的影響
面向對象的編程語言的一個主要優勢是,通過為軟件的重復使用提供一種強大的語言機制,來增加開發的生產力。然而實際上,很少能夠獲得這種可重用性。因為大量地使用這些機制可能會極大地減損性能,因而程序員都必須謹慎地使用它們。Java HotSpot技術的一個驚人的副作用是,它大大地減少了這種性能的減損代價。我們相信,這將會對面向對象的軟件的開發方法產生重要的影響,它將第一次允許各個公司可以充分地使用面向對象的可重用性機制,且不會減損他們的軟件性能。
這種作用的示例很容易獲得。一個對使用Java編程語言的程序員的調查結果將會明確表明,許多程序員都避免使用全"虛擬"方法同時也避免編寫較大的方法。因為他們確信,每一個虛擬方法的調用都會導致性能的下降。同時,"虛擬"方法(也就是在Java編程語言中的非"static"或"final"那些方法)的精細使用對高可重用性的類的構造特別重要,因為每一個這樣的方法的作用就象一個"異常分支(hook)",它允許新的子類修改超類的操作。
由于Java HotSpot性能引擎可自動地內嵌大部分虛擬方法調用,因此,性能下降的程度被大大地減小了,甚至在許多情況下,被全部消除了。
無論怎樣強調這種作用的重要性都不會過分。因為使用重要的可重用性機制,可以大大地改變有關性能的權衡關系, 這種技術具有從根本上改變面向對象的代碼的編寫方式的潛力。除此之外,隨著面向對象的編程方法的成熟,有一種明顯的向著更細分的對象以及更細分的方法發展的趨勢。這兩個趨勢都旨在以將來的代碼風格,極力增加虛擬方法調用的頻率。隨著這種高級代碼風格的流行,Java HotSpot技術的優勢將愈發明顯。
8. Java本地接口(JNI)支持
Java HotSpot性能引擎可用標準Java本地接口(JNI)支持本地方法。以前用JNI編寫的本地方法在源代碼和二進制代碼格式上都是向上兼容的。初始本地方法接口將不被支持(JNI被部分地引入,因為舊的接口沒有提供對本地方法DLLs的二進制兼容性)。
“Java HotSpot性能引擎的體系結構有哪些知識點”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。