新四季網

一種在只讀存儲器中加載類的方法及系統的製作方法

2023-06-25 03:31:31 3


專利名稱::一種在只讀存儲器中加載類的方法及系統的製作方法
技術領域:
:本發明涉及具有運行時間動態加載的類的面向對象的計算機系統,具體地說,涉及一種在只讀存儲器中預加載類的一個子集的系統及方法。當前面向對象的程式語言的一個趨勢是擴展語言的功能,以適應在分布式計算環境中動態內容的分布。在一種這樣的語言中,它是通過運行時間動態加載類來實現的。類是一些變量與方法的集合,它們是一個對象行為的模型。通過運行時間動態加載類,已有的應用程式可以通過連接入新類來增加功能,這些新類駐留在分布式計算環境中的任何計算機系統中。在這種語言中,符號引用(symbolicreferences)用於指代類成員(如類的方法與類變量)。當一個類被調用時,動態加載器確定類的存儲方案並解決符號引用。當訪問不斷被更新的類時,這樣的加載方案是有益的。然而,這種加載方案的一個局限性是它依賴於讀/寫存儲器設備,如隨機存取存儲器(RAM)。在一種有很少或沒有輔助存儲器(如非易失性磁碟存儲器)的計算環境中,如此動態加載類會很快用盡RAM的存儲容量。由於RAM的容量是有限的,儘量減少應用程式使用RAM的量是需要的。因此,在執行含有可動態加載的類的面向對象的程序代碼時,需要限制其所用的RAM的量。提供一種克服現有技術此缺陷的方法及系統將是有益的。簡言之,本公開屬於一種離線式(offline)類加載器,它用於產生一個可執行模塊,該模塊的類被預加載入存儲器中而不需要運行時間動態加載。儘管如此,該可執行模塊仍然包括一個專用於運行時間動態加載的類結構。因此,這種離線式類加載器修改現有類結構以適應靜態加載。然而,這種類結構允許改變包含未解決的引用的數據和方法。該離線式類加載器給這些方法和數據打上標記,指明它們將要被存入隨機存取存儲器中。其他數據都存儲在只讀存儲器中。當靜態加載過程完成後,就產生一個包含兩個地址空間的可預加載的可執行模塊。第一地址空間包括含有未解決的引用的方法,和在模塊執行過程中變化的數據該第一地址空間被加載到隨機存取存儲器。第二地址空間包括含有被靜態加載的類的方法和被加載到只讀存儲器的常數。在客戶機有很少或沒有輔助存儲器的分布式計算機系統中,這種可預加載的可執行模塊是有益的。這樣的客戶機需要完全在隨機存取存儲器中運行應用程式,隨機存儲器很快就成為有限的資源。通過採用這種離線式類加載器將應用程式分成兩個地址空間,可預加載模塊使用的RAM數量就減至最少。在一個實施例中,一臺具有最低限度輔助存儲器的客戶機採用離線式類加載器在客戶機的只讀存儲器中預加載了一個瀏覽器。該瀏覽器被分入前述的兩個地址空間。當系統初始化或上電時,該瀏覽器的隨機存取存儲器部分就從只讀存儲器加載到隨機存取存儲器。通過在只讀存儲器執行瀏覽器的一大部分,瀏覽器就擁有了更多的RAM用來存儲信息內容和可執行模塊,它們是從與客戶機通訊的其它伺服器計算機上獲得的。從以下的詳細描述和所附權利要求並結合附圖,本發明的其他目的和特徵會更加明白,附圖為圖1是分布式計算機系統的方框圖。圖2是圖1所示分布式計算機系統中客戶機的方框圖。圖3是說明處理部件的流程圖,該處理部件用於產生可預加載的可執行模塊。圖4是說明類文件的文件構造。圖5是說明常量池(constantpool)的文件構造。圖6說明類塊數據結構。圖7說明一個指令字節碼流。圖8A和8B是離線式類加載器所用方法的流程圖。圖9是建立類塊數據結構的方法的流程圖。圖10是刪除重複常量的方法的流程圖。圖11是將非快速(non-quick)指令格式轉換為快速指令格式的方法的流程圖。圖12為一方框圖,說明將應用程式預加載到只讀存儲器和隨機存取存儲器的映射關係,並說明被靜態類初始化器映射到隨機存取存儲器中的方法及數據部分的加載過程。這裡描述的方法與系統採用分布式計算環境,該分布式計算環境具有連接至少一臺伺服器計算機和一些客戶機的通信鏈路。有些客戶機具有很少或沒有輔助存儲器(如非易失性磁碟存儲器),因此要求應用程式完全在隨機存取存儲器中運行。一種用Java程式語言開發的應用程式在這樣一個客戶機上執行。最好,該應用程式是這樣一個瀏覽器,要從一個或多個伺服器計算機上輸入Java內容,如Java小應用程式(applet)。通常該瀏覽器是一個解釋程序模塊,它採用超文本傳輸協議(HTTP)檢索網絡文檔,以便從作為網址的伺服器存取一個或多個網頁,這些網頁的格式為超文本標記語言(HTML)。HTML文檔經解釋後顯示給客戶機端的用戶。通常,HTML文檔嵌入小應用程式中。小應用程式是一個可執行模塊,表示為一個Java類。瀏覽器將該小應用程式及相關類載入,以執行此小應用程式。瀏覽器、HTML文檔及小應用程式都駐留在計算機的RAM中。有時,載入RAM中的數據是會超過其容量。由於客戶機可能沒有輔助存儲器,將瀏覽器和其它基本支持類的一部分置入只讀存儲器是有益的。這樣,RAM存儲器特地為輸入的小應用程式而保留。最好,瀏覽器和其它基本支持類(如I/O和實用類)被預加載到只讀存儲器。離線式類加載器將Java應用程式,如瀏覽器及基本支持類,分成至少兩個分離的地址空間。第一地址空間駐留在只讀存儲器中,包括不需要動態加載的方法和保持不變的數據。第二地址空間駐留在讀/寫存儲器(如隨機存取存儲器)中,包括需要動態加載的方法和在執行過程中變化的數據。這樣劃分的瀏覽器可初始存儲在客戶機的只讀存儲器中。系統上電時,第二地址空間被預加載到RAM。這樣會留出大量RAM存儲器以供瀏覽器輸入HTML文檔、小應用程式、其它信息前後文(information-context)以及可執行模塊,它們都可通過通信鏈路存取。應當指出,本公開是參考Java程式語言進行描述的。因此,本描述將採用Java中的術語。下述Java術語在全篇描述中將會頻繁使用,在此作簡要說明。類是用於描述對象行為的實例(instance)變量和方法的組合。對象是類的一個實例。實例變量是對象的數據,它由類實例化而來。靜態實例變量對於類的所有實例都是相同的。非靜態實例變量對類的每個實例都不同。常量數據指那些在程序執行過程中不改變的數據。方法是執行一系列含義明確的操作的程序段。在Java中,方法是用字節碼流表示的指令實現的。字節碼是一個8位的代碼,它可以是指令的一部分,如一個8位的操作數或操作碼。接口是一個抽象類,其中實現方法的字節碼在運行時間定義。Java應用程式是包含字節碼的可執行模塊,它可以採用Java解釋器或Java及時(just-in-time)編譯器執行。Java程式語言的特色在TimRitchey所著的ProgrammingwithJavaBeta2.0,NewRidersPublishing(1995)一書中有詳細描述。參照圖1,所示分布式計算機系統100,有多個客戶機102和多個伺服器計算機104。在一個實施例中,每臺客戶機102通過Intemet106與伺服器104連接,當然也可採用其它形式的通信連接。最好,伺服器和客戶計算機可以是桌面計算機,如Sun工作站、IBM兼容機及Macintosh機,然而,實際上任何類型的計算機均可作為伺服器或客戶機。而且,該系統並不限於分布式計算機系統。它可以不按這裡說明的細節實現,可以實現為不同的計算機系統、不同結構的緊耦合處理器或不同結構的鬆耦合微處理器系統。在一個實施例中,一個或多個伺服器計算機作為網址包括一個HTML文檔庫,其中包含Java內容和小應用程式。客戶機執行瀏覽器,該瀏覽器為客戶機端的用戶提供從伺服器計算機存取HTML文檔的機會。參照圖1,伺服器計算機通常包括一個或多個處理器112、通訊接口116、用戶接口114及存儲器110。存儲器110存儲·作業系統118;·Intemet通信管理器程序或其它類型的網絡訪問程序120;·編譯器122,用於將Java程式語言寫的原始碼翻譯成字節碼流;·原始碼庫124,包括一個或多個包含Java原始碼的原始碼文件;·類文件庫128,包括一個或多個類文件130、及包含類文件的一個或多個類庫131,每個類文件包含代表特定類的數據;·離線式類加載器132,用於預加載特定的一組類;離線式類加載器也可稱為靜態類加載器;彙編器134,產生目標文件,以連接器可識別的格式表示類成員、類數據結構及存儲器存儲指示器;·連接器136,為一系列預加載的類確定存儲器布局,以及解決所有符號引用;·瀏覽器138,用於存取HTML文檔;·一個或多個數據文件,供伺服器使用。瀏覽器可以包括·運行時間類加載器模塊140,將類加載入用戶地址空間,並使用字節碼程序校驗器校驗與每個被加載類相關的方法的完整性;·字節碼程序校驗器模塊142,校驗一個指定程序是否滿足某些預定的完整性準則;和·HTML加載器144,用於加載HTML文檔;以及其它模塊。圖2所示為客戶機,包括一個或多個處理器202、通信接口206、用戶接口204、只讀存儲器208和隨機存取存儲器210。只讀存儲器208存儲瀏覽器的一部分212和支持程序(包括作業系統213和網絡訪問程序214),該支持程序中的方法不含未解決的引用,且該支持程序中的數據保持不變。隨機存取存儲器210存儲·瀏覽器的第二部分215和支持程序216、217,包括含有未解決的引用的應用程式和執行過程中變化的數據;·HTML文檔庫220,包括一個或多個HTML文檔222,這些文檔是應用戶請求通過用戶接口204由瀏覽器獲取的;·類文件庫224,包括一個或多個類文件或小應用程式226;以及·一個或多個數據文件228,客戶機在其處理中可能會用到這些數據文件。圖3是產生可預加載的可執行模塊所用步驟的順序的概況圖。應該指出,這裡描述的方法和系統適合預加載瀏覽器和其它支持程序。然而,這裡描述的方法和系統並不限於此處特定的Java應用程式。任何Java應用程式或其它運行時間連接的方法集都可用這裡描述的方法和系統預加載。每個包含Java應用程式的類的原始碼126被編譯器122編譯成類文件130。類文件包含代表類的類數據結構、每個方法的字節碼、常量數據及其它信息。對類文件更詳細的說明見後。另一種方法是,與應用程式對應的類文件可以已經駐留在一個或多個類庫131中。一旦類文件可以使用,組成將被預加載的應用程式的整套類文件128就被傳送給離線式類加載器132。離線式類加載器132的作用是確定與每個類相關的哪些方法和變量能存入只讀存儲器,哪些必須存入隨機存取存儲器。調用Java接口或使用非靜態實例變量的方法需駐留在隨機存取存儲器中。這是因為實現接口的字節碼是運行時間確定的,且非靜態實例變量對於每個相關類的實例化是變化的。離線式類加載器132找到這些方法和變量,並插入一個特殊的指示器標記出它們將被加載到隨機存取存儲器。離線式類加載器還進行一系列的優化,以產生更緊湊的可執行代碼。例如,與每個類相關的常量池被結合起來供所有駐留在應用程式中的類使用。另外,離線式類加載器還進行附加的處理,以便將原來為動態加載構造的類文件改為供預加載的類環境使用。離線式類加載器的輸出302由兩個文件組成一個是包含整個應用程式的常量數據的常量池文件;另一個是更新的類文件,包含類數據結構和類成員。這兩個文件中的數據的格式均為數據定義,其中每個定義指定一個字節碼和一個指示存儲器位置的偏移量。更新的類文件包含存儲器指示器,它指明特定的一組定節碼存入哪種類型的存儲器。然而,此處描述的方法和系統並不限於產生這兩個文件。也可採用其它文件結構,包括但不限於一個包含所有相關類數據的文件。接著,該文件傳送給彙編器134,它產生一個目標模塊,該模塊具有連接器將數據映射到相應地址空間所需的格式。最好有兩個地址空間,一個給隨機存取存儲器,另一個給只讀存儲器。接著目標模塊傳送給連接器136,它給應用程式中的類生成存儲器布局。一旦確定了存儲器布局,連接器136將解決所有的符號引用,並以直接地址取代它們。該存儲器布局被分成兩個地址空間。被標記為只讀存儲器的方法和數據包含在第一地址空間,被標記為需存入隨機存取存儲器的方法和數據包含在第二地址空間。連接器136的輸出是一個可預加載的可執行模塊306,包含這兩個地址空間的方法和數據。如上所述,離線式類加載器的主要功能是確定哪些方法和數據要被存入只讀存儲器及哪些要被存入隨機存取存儲器。另外,所有預加載的類的常量池最好結合起來,以將使用的只讀存儲器的量降至最少。為結合常量池,進行了某些優化以降低存儲器的使用量。更具體地說,刪除了重複的表達式,作為長字符串一部分的字符串被長字符串中相應子字符串位置的指針所取代。包含所有類的通用常量池,被分成兩段,第一段橫跨256位元組,第二段橫跨64K-256位元組。第一段可以包括最多256個常量,第二段包括其餘的常量。常量池的排序使得最常引用的常量存入池的第一段,最不常引用的常量存入第二段。一旦常量池被結合了,引用常量的字節碼可能需要加以修改。第一段中的常量用8位操作數引用,而第二段中的常量用兩個8位操作數引用(見圖7,其中操作數702是一個8位操作數,操作數704和706共同組成了一個16位操作數)。從8位操作數擴展成16位操作數,需調整引用通用常量池第二段中的常量的字節碼,同時考慮到這些方法中字節碼改變的相對位置,調整方法中的字節碼偏移量(如在分支指令中)。另外,字節碼的改變要求更新存儲在異常表中的偏移量,以反映方法中字節碼起始和結束位置的改變,據此指定不同的異常處理程序。進而,離線式類加載器執行另兩個變換,以使類結構適合於預加載類。產生一個靜態類初始化器,它對預加載的類進行類初始化。採用非快速指令格式用符號引用方法的字節碼,重新編碼為快速指令格式以直接引用該方法。圖8更為具體地描述了離線式類加載器132所採用的步驟。起始時離線式類加載器接收一個類文件,其中的每一個類都是應用程式的一部分,該應用程式的類將被預加載。圖4說明該類文件的格式。該類文件包含一個或多個首標記錄(headerrecord)402、一個常量池404、一個或多個方法406以及一個異常表408。首標記錄402可以指明常量池的大小、方法的個數和異常表的大小。常量池404包括應用程式執行過程中保持不變的數據。這種數據的例子可包括字符串常量、靜態最終整數(finalintegers)、對方法的引用、對類的引用以及對接口的引用。方法數據406由實現每個方法的字節碼流組成,異常表中的每一項給出字節碼起始和結束偏移量、異常類型、以及異常處理程序的偏移量。該項指明在起始和結束偏移量指明的代碼中出現指明類型的異常時,該異常的處理程序可在給定處理程序的偏移量處找到。每個類文件都被離線式類加載器讀入(步驟802),並給每個類建立合適的類數據結構(804),該類數據結構存入用於預處理應用程式的計算機的存儲器中。圖6說明類數據結構600。每個類都有一個類塊602、一個或多個方法塊604、每個方法的字節碼60g、一個或多個欄位塊614、用於各欄位的各分離數據區618、常量池624、映射表626和異常表628。類塊是一個定長的數據結構,可包括下列數據·類名630;指針632,指向當前類的最近超類(immediatesuperclass)的類塊;·一個或多個指針的數組634,每個指針引用一個方法塊;·一個或多個指針的數組636,每個指針引用一個欄位塊;·指向類的常量池的指針638;·指向類的異常表的指針640。方法塊604是一個定長的數據結構,包括確定數目的方法。分配一個或多個方法塊以包含類的所有方法。方法塊604包括方法名612和指向相應字節碼608的指針610。欄位塊614是一個定長的數據結構,包括實例變量或欄位。Java為兩種不同類型的變量提供不同的欄位塊格式。第一種格式616用於整型或浮點型實例變量。該格式616包含實例變量名、類型(如整型或浮點型)及其值。第二種格式620用於雙精度型或長型實例變量。該格式620包含實例變量名、類型(如雙精度型或長型)及指向實例變量值618位置的指針。圖9說明用於建立類數據結構的步驟。首標記錄中的信息用於給每個類數據結構分配空間(步驟1002)。一旦類數據結構被分配好,指向這些結構位置中的每一個的指針就被包括在類塊中(步驟1004)。接著,離線式類加載器讀入常量池。在討論這些步驟之前,首先描述常量池的內容。圖5說明存儲在每個類文件中的常量池的結構。第一項包含類名和超類名(502)。這些名字存儲為字符串常量,第一項包含指向常量池中的這些字符串位置的指針。第二項屬於欄位和實例變量。首標504用來指示常量池中欄位的個數。首標後面是各個欄位506。類似地,字符串常量前面是首標508,該首標指示常量池中字符串常量的個數。跟著的是各個字符串常量510。字符串常量用於表示方法名、類名及接口名。後面,存儲在常量池中的方法引用之前是首標,該首標指示方法的數量512。常量池中對每個方法都有方法指針511,該方法指針包含指向方法名的指針514和指向方法類名的指針516。這些名字以字符串常量存儲在常量池中。方法指針511用來用符號引用一個方法。這用在調用方法指令的非快速格式中。一個方法可以包含一條調用一個方法的指令。該指令用非快速格式可表示如下調用方法「類」。「方法」(1)這裡「類」指包含類名的字符串常量,「方法」指包含方法名的字符串常量。調用方法指令包含一個指向方法指針511的指針。離線式類加載器通過向方法名加入指向方法塊的指針來解決符號引用。一旦連接器確定了各個類的存儲器布局,連接器以直接引用方法(即通過存儲方法的地址)的快速格式取代調用方法指令的非快速格式。通過解決符號引用,該方法可被預加載。回過頭來參照圖9,為映射表626分配了存儲器,該映射表將跟蹤常量在類文件常量池中從最初位置到不同的臨時位置的移動,直到常量被存入通用常量池。給每個類建立映射表626,將常量池中每一個常量的最初地址映射到它的當前地址(步驟1006)。常量池中除欄位外的所有數據都從類文件讀取並存入常量池(步驟1008)。隨著常量從類文件中轉移到常量池中,映射表626要進行更新,以反映常量池中的最初地址與當前地址(步驟1008)。然而,從常量池中讀取的欄位被加載入一個或多個欄位塊,在映射表中沒有為它們創建項(步驟1008)。方法數據從類文件中讀取,並存入一個或多個方法塊。附加存儲器分配給與每個方法相關的字節碼。方法名和指向字節碼位置的指針一起放入方法塊(步驟1010)。類似地,異常表也從類文件中加載入相應的異常表數據結構中(步驟1012)。回過頭來參照圖8,類數據結構建立之後,按照所有常量池的總長度分配了一個散列表(hashtable)180(見圖3),後面將用它刪除重複常量(步驟805)。接著,離線式類加載器開始刪除重複常量。這樣做的目的是將所有類的常量池結合成一種有效利用空間的形式。對於每個類文件(步驟806),掃描類常量池中的每一項來查找重複常量(步驟812)。參照圖10,採用散列表檢測重複常量。常量的散列值由一個合適的散列函數(hashingfunction)確定(步驟1102)。進行檢查以確定該散列值是否包含在散列表中(步驟1104)。如果散列表中存在該散列值,則該常量是重複的,於是通過改變映射表中的常量項以反映已有常量的存儲位置,來從常量池中刪除該項(步驟1106)。否則,該常量的散列值和存儲位置存入散列表(步驟1108)。回過頭來參照圖8,離線式類加載器開始確定公用子字符串(commonsubstrings)。公用子字符串是作為已存儲在常量池中的一個長字符串的一部分包含在其中的字符串。對於每個類文件(步驟814),掃描每個字符串以確定它是否是常量池中包含的某個長字符串的一部分(步驟816)。這可以採用幾種有名的字符串匹配算法之一來完成。當找到這樣一個子字符串,它就被指向較大字符串中子字符串位置的指針所取代(步驟818)。接著離線式類加載器開始掃描包含在每個類文件中所有方法的字節碼(步驟820-824)。參照圖11,在字節碼中查找調用接口指令(步驟1202)。具有調用接口指令的方法都標記為RAM存儲器,因為被這種指令調用的方法只有運行時間才能完成(步驟1204)。否則,在字節代碼中查找調用方法指令(步驟1206)。在這種情況下,向存儲在常量池中的方法名加入一個指向方法塊的指針518(見圖5),該方法塊包含要被調用的方法(步驟1208)。後面當連接器確定了所有類的存儲器布局,連接器以方法的直接地址取代方法的符號引用。這是通過跟蹤指向方法塊的方法名指針確定的,該方法塊包含指向該方法的指針。由於每個字節碼都被掃描,對每個被字節碼存取的變量產生一個引用計數(步驟828)。引用計數是包含在映射表中的附加欄位。這在後面將用於確定最常用常量,從而對常量池重新排序。另外,掃描每個字節碼以查找被字節碼改變的欄位。這可以通過檢查該欄位是否曾使用在一個賦值語句的左端來確定。在這種情況下,欄位接受一個新值。如果被改變的欄位將其值存入欄位塊,那麼整個欄位塊都標記為RAM存儲器(步驟830)。一旦為通用常量池分配了空間,來自不同類常量池的項都合併入通用常量池中(步驟902)。如前所述,常量池分成兩段。第一段最多可容納256個最常引用的常量。第二段容納其餘的常量。不曾被引用的常量被刪除,且不存儲在通用常量池中。由於映射表具有引用計數,具有被刪除的重複項,且具有指向公用子字符串的指針,所以常量池項從每個類的映射表讀取。一旦形成了通用常量池,引用存儲在通用常量池第二段中的常量的字節碼需要一個雙長度偏移量值,它佔據了兩個字節而不是一個來引用該常量。這要求掃描每個字節碼以查找每個類的方法(步驟906-908),並且對於每個引用通用常量池第二段中一個常量的字節碼,以一個雙字節偏移量取代單字節偏移量以尋址該常量(步驟910)。這可以通過為存儲該字節碼而分配另一個數據區來實現。隨著字節碼被掃描,它們被讀入新數據區並且任何要求用雙字節偏移量取代的單字節偏移量在此拷貝過程中被取代。然後方法塊被更新以反映字節碼新的存儲位置。表示分支指令的字節碼的偏移量操作數按照在分支字節碼和分支目標字節碼之間位置加入的字節數(如果有)進行調整。類似地,如果類文件中的任何方法引用常量池第二段中的常量,每個類文件的異常表都需要調整。常量池第二段中被調整的引用常量的指令將會比以前佔用更多的空間,因此影響到異常表中的偏移量。被雙長度常量池偏移量的插入影響的修正過的起始與結束偏移置以及處理程序的偏移量都將被計算並存入異常表中(步驟916-918)。接著,產生一種處理靜態類初始化的新方法。通常情況下,當一個類被動態加載後,同時運行一個類初始化器來初始化與該類相關的某些變量等。由於這些類被預加載到在此描述的方法和系統中,所以將不進行類初始化。因此,離線式類加載器需要創建一個方法,該方法將對預加載的類進行類初始化。然而,為了確定每個類初始化器的執行順序,先執行數據流分析(步驟920-924)。由於一個類可能用到在另一個類中初始化的數據,因此這個順序是重要的。如果不保持正確的順序,靜態類初始化器將產生錯誤的結果。一旦確定了順序,將產生一個新的方法,該方法將按照類被預加載的順序對每個類進行初始化(步驟926)。然後在類塊結構中插入連接指示器(linkageindicator)以標誌哪些方法和欄位塊將被存入隨機存取存儲器。連接器利用這些信息為將被存入隨機存取存儲器的方法和欄位塊生成一個分離的地址空間。連接器可以認為沒有指示器意味著方法和欄位將被存入只讀存儲器。另一種可能的選擇是,一個附加的指示器可用來顯式地指示那些將被存入只讀存儲器的方法、類數據結構和欄位(步驟928)。最後,離線式類加載器輸出通用常量池、一個包含類數據結構和指明存儲器要求的指示器的更新的類文件,以及一個特殊的引導時間啟動器(boottimeinitiator)(步驟930)。參照圖12,可預加載的可執行模塊和引導時間啟動器1220永久性地存儲在客戶機的只讀存儲器中。每一次客戶機上電或重新啟動時,都將自動執行引導時間啟動器。在其它任務中,引導時間啟動器將那些在執行過程中必須駐留在隨機存取存儲器中的方法和數據,拷貝到隨機存取存儲器中由連接器程序指定的位置。雖然前述系統和方法是按照執行Java瀏覽器和支持程序用於在Internet上訪問HTML文檔來描述的,但此處描述的方法和系統可應用於任何Java應用程式。而且,Java應用程式不必運行於分布式環境中,它可以以獨立模式(stand-alonemode)運行於客戶機或伺服器計算機上,而不從外部系統輸入新的類。在獨立模式中,應用程式為滿足特殊計算環境的存儲器限制被分成兩個地址空間。雖然此處描述的方法和系統是參考Java程式語言描述的,但它也可用於其它採用面向對象的類的計算機系統,這些類使用動態運行時間加載。進而,上述方法和系統可以在多種類型的可執行媒體上執行,而不僅限於如隨機存取存儲器這樣的存儲設備。也可採用其它類型的可執行媒介,例如計算機可讀存儲介質,它可以是任何存儲器設備、光碟和軟磁碟,但也不局限於此。本發明由所附的權利要求的全部等價的保護範圍明確定義。權利要求1.一種操作一臺分布式計算機系統中的計算機的方法,所述方法包括如下步驟在存儲器中存儲多個類,每個類包括數據和至少一個方法,每個方法包括多個字節碼,所述字節碼的一個子集包括對所述計算機可存取的方法的符號引用;如果所述類數據可被所述類方法之一修改,則對於每個所述類標記所述類數據;將每個對存儲在所述存儲器中的一指定方法的所述符號引用,用所述指定方法的存儲位置來替換;如果所述方法的字節碼之一包括對一個不存儲在所述存儲器中的方法的符號引用,則對於每個所述類的每個所述方法,標記所述方法;以及提供一個包括每個所述類的可執行模塊,在執行所述可執行模塊時,每個未標記的方法和每個未標記的數據將被存入只讀存儲介質中,並且在執行所述可執行模塊時,每個所述標記的方法和每個所述標記的數據將被存入可讀可寫的存儲介質中。2.一種操作一個計算機系統的方法,所述方法包括如下步驟在只讀存儲器設備中存儲被分成第一子模塊和第二子模塊的瀏覽器模塊,每個子模塊包括多個指令和數據,所述第二子模塊有一個所述指令的子集和一個所述數據的子集,所述指令子集和數據子集包括在所述多個指令執行過程中可修改的指令和數據;在計算機系統啟動時,將第二子模塊存儲到隨機存取存儲器設備中;以及執行瀏覽器模塊以輸入信息內容數據和計算機可執行模塊,所述輸入數據和所述計算機可執行模塊存儲在隨機存取存儲器設備中。3.在一個具有用通信鏈路連接起來的多個計算機的分布式數據處理系統中,所述計算機之一包括存儲多個類的存儲器,每個所述類包括多個數據和至少一個方法,每個所述方法包括多個字節碼,第一組所述字節碼引用存儲在存儲器中方法,第二組所述字節碼引用可通過所述通信鏈路訪問的方法;離線式類加載器,當類數據可以被所述類方法之一修改時,對每個類標記所述類數據,在所述方法的字節碼之一包括對不存儲在所述存儲器中的方法的符號引用時,對每個所述類的每個所述方法,標記所述方法;產生可執行模塊的連接器,具有第一部分和第二部分,第一部分包括每個被所述離線式類加載器標記的所述類方法和所述數據,而第二部分包括每個不在所述第一部分的所述類方法和所述數據。4.如權利要求3所述的計算機,其中當可執行模塊被執行時,所述可執行模塊的所述第一部分被設置為存入可讀可寫的介質,當所述可執行模塊被執行時,所述第二部分被設置為存入只讀存儲介質。全文摘要提供可執行模塊的方法和系統,該模塊有兩個地址空間,分別駐留在ROM和RAM中。該可執行模塊表示為動態類加載而構造的Java類。靜態類加載器修改類結構使其適合靜態加載,它還鑑別包含未解決的符號引用的方法和在模塊執行過程中變化的數據,以便將其置於RAM中的地址空間。靜態類加載器對於分布式計算環境中很少或沒有輔助存儲器的客戶機很有利,因為通過使用ROM存儲靜態可加載類,可騰出RAM用於其它用途。文檔編號G06F9/46GK1172303SQ9711290公開日1998年2月4日申請日期1997年5月29日優先權日1996年5月30日發明者西倫·D·託克申請人:昇陽電腦有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀