導航:首頁 > 源碼編譯 > soft編譯器

soft編譯器

發布時間:2025-01-17 05:17:53

A. 關於集成電路的專業術語有那些,各位有誰知道啊

【集成電路(IC)】電子專業術語英漢對照加註解

電子專業英語術語
★rchitecture(結構):可編程集成電路系列的通用邏輯結構。
★ASIC(Application Specific Integrated Circuit-專用集成電路):適合於某一單一用途的集成電路產品。
★ATE(Automatic Test EQUIPment-自動測試設備):能夠自動測試組裝電路板和用於萊迪思 ISP 器件編程的設備。
★BGA(Ball Grid Array-球柵陣列):以球型引腳焊接工藝為特徵的一類集成電路封裝。可以提高可加工性,減小尺寸和厚度,改善了雜訊特性,提高了功耗管理特性。
★Boolean Equation(邏輯方程):基於邏輯代數的文本設計輸入方法。
★Boundary Scan Test(邊界掃描測試):板級測試的趨勢。為實現先進的技術所需要的多管腳器件提供了較低的測試和製造成本。
★Cell-Based PLD(基於單元的可編程邏輯器件):混合型可編程邏輯器件結構,將標準的復雜的可編程邏輯器件(CPLD)和特殊功能的模塊組合到一塊晶元上。
★CMOS(Complementary Metal Oxide Semiconctor-互補金屬氧化物半導體):先進的集成電路★加工工藝技術,具有高集成、低成本、低能耗和高性能等特徵。CMOS 是現在高密度可編程邏輯器件(PLD)的理想工藝技術。
★CPLD(Complex Programmable Logic Device-復雜可編程邏輯器件):高密度的可編程邏輯器件,包含通過一個中央全局布線區連接的宏單元。這種結構提供高速度和可預測的性能。是實現高速邏輯的理想結構。理想的可編程技術是 E2CMOS?。
★Density (密度):表示集成在一個晶元上的邏輯數量,單位是門(gate)。密度越高,門越多,也意味著越復雜。
★Design Simulation(設計模擬):明確一個設計是否與要求的功能和時序相一致的過程。
★E2CMOS?(Electrically Erasable CMOS-電子可擦除互補金屬氧化物半導體):萊迪思專用工藝。基於其具有繼承性、可重復編程和可測試性等特點,因此是一種可編程邏輯器件(PLD)的理想工藝技術。
★EBR(Embedded BLOCk RAM-嵌入模塊RAM):在 ORCA 現場可編程門陣列(FPGA)中的 RAM 單元,可配置成 RAM、只讀存儲器(ROM)、先入先出(FIFO)、內容地址存儲器(CAM)等。
★EDA(Electronic Design Automation-電子設計自動化):即通常所謂的電子線路輔助設計軟體。
★EPIC (Editor for Programmable Integrated Circuit-可編程集成電路編輯器):一種包含在 ★ORCA Foundry 中的低級別的圖型編輯器,可用於 ORCA 設計中比特級的編輯。
★Explore Tool(探索工具):萊迪思的新創造,包括 ispDS+HDL 綜合優化邏輯適配器。探索工具為用戶提供了一個簡單的圖形化界面進行編譯器的綜合控制。設計者只需要簡單地點擊滑鼠,就可以管理編譯器的設置,執行一個設計中的類似於多批處理的編譯。
★Fmax:信號的最高頻率。晶元在每秒內產生邏輯功能的最多次數。
★FAE(Field Application Engineer-現場應用工程師):在現場為客戶提供技術支持的工程師。
★Fabless:能夠設計,銷售,通過與矽片製造商聯合以轉包的方式實現矽片加工的一類半導體公司。
★Fitter(適配器):在將一個設計放置到目標可編程器件之前,用來優化和分割一個邏輯設計的軟體。
★Foundry:矽片生產線,也稱為 fab。 FPGA(Field Programmable Gate Array-現場可編程門陣列):高密度 PLD 包括通過分布式可編程陣列開關連接的小邏輯單元。這種結構在性能和功能容量上會產生統計變化結果,但是可提供高寄存器數。可編程性是通過典型的易失的 SRAM 或反熔絲工藝一次可編程提供的。
★"Foundry" :一種用於ORCA 現場可編程門陣列(FPGA)和現場可編程單晶元系統(FPSC)的軟體系統。
★FPGA(Field Programmable Gate Array-現場可編程門陣列):含有小邏輯單元的高密度 PLD,這些邏輯單元通過一個分布式的陣列可編程開關而連接。這種體系結構隨著性能和功能容量不同而產生統計上的不同結果,但是提供的寄存器數量多。其可編程性很典型地通過易失 SRAM 或者一次性可編程的反熔絲來體現。
★FPSC(Field Programmable System-on-a-Chip-現場可編程單晶元系統):新一代可編程器件用於連接 FPGA 門和嵌入的 ASIC 宏單元,從而形成一晶元上系統的解決方案。
★GAL? (Generic Array Logic-通用陣列邏輯):由萊迪思半導體公司發明的低密度器件系統。
★Gate(門):最基本的邏輯元素,門數越多意味著密度越高。
★Gate Array(門陣列):通過邏輯單元陣列連接的集成電路。由生產廠家定製,一般會導致非再生工程(NRE)消耗和一些設計冗餘。
★GLB(Generic Logic BLOCk-通用邏輯塊):萊迪思半導體的高密度 ispPSI?器件的標准邏輯塊。每一個 GLB 可實現包含輸入、輸出的大部分邏輯功能。
★GRP(Global Routing Pool-全局布線池):專有的連接結構。能夠使 GLBs 的輸出或 I/O 單元輸入與 GLBs 的輸入連接。萊迪思的 GRP 提供快速,可預測速度的完全連接。
★High Density PLD(高密度可編程邏輯器件):超過 1000 門的 PLD。
★I/O Cell(Input/Output Cell-輸入/輸出單元):從器件引腳接收輸入信號或提供輸出信號的邏輯單元。
★ISPTM(In-System Programmability-在系統可編程):由萊迪思首先推出,萊迪思 ISP 產品可以在系統電路板上實現編程和重復編程。ISP 產品給可編程邏輯器件帶來了革命性的變化。它極大地縮短了產品投放市場的時間和產品的成本。還提供能夠對在現場安裝的系統進行更新的能力。
★ispATETM:完整的軟體包使自動測試設備能夠實現:
1)利用萊迪思 ISP 器件進行電路板測試和
2)編程 ISP 器件。
★ispVM EMBEDDEDTM:萊迪思半導體專用軟體由 C 源代碼演算法組成,用這些演算法來執行控制編程萊迪思 ISP 器件的所有功能。代碼可以被集成到用戶系統中,允許經由板上的微處理器或者微控制器直接編程 ISP 器件。
★ispDaisy Chain Download SOFtware (isp菊花鏈下載軟體):萊迪思半導體專用器件下載包,提供同時對多個在電路板上的器件編程的功能。
★ispDSTM:萊迪思半導體專用基於 Windows 的軟體開發系統。設計者可以通過簡單的邏輯公式或萊迪思 - HDL 開發電路,然後通過集成的功能模擬器檢驗電路的功能。整個工具包提供一套從設計到實現的方便的、低成本和簡單易用的工具。
★ispDS+TM:萊迪思半導體兼容第三方HDL綜合的優化邏輯適配器,支持PC和工作站平台。IspDS+ 集成了第三方 CAE 軟體的設計入口和使用萊迪思適配器進行驗證,由此提供了一個功能強大、完整的開發解決方案。第三方 CAE 軟體環境包括:Cadence, Date I/O-Synario,Exemplar Logic,ISDATA, Logical Devices,Mentor Graphics,OrCAD, Synopsys,Synplicity 和 Viewlogic。
★isPGAL?:具有在系統可編程特性的 GAL 器件
★ispGDSTM:萊迪思半導體專用的 ISP 開關矩陣被用於信號布線和 DIP 開關替換。
★ispGDXTM:ISP 類數字交叉點系列的信號介面和布線器件。
★ispHDLTM:萊迪思開發系統,包括功能強大的 VHDL 和 Verilog HDL 語言和柔性的在系統可編程。完整的系統包括:集成了 Synario, Synplicity 和 Viewlogic 的綜合工具,提供萊迪思 ispDS+ HDL 綜合優化邏輯適配器。
★ispLSI?:萊迪思性能領先的 CPLD 產品系列的名稱。世界上最快的高密度產品,提供非易失的,在系統可編程能力和非並行系統性能。
★ispPAC?:萊迪思唯一的可編程模擬電路系列的名稱。世界上第一個真正的可編程模擬產品,提供無與倫比的所見即所得(WYSIYG)邏輯設計結果。
★ispSTREAMTM:JEDEC 文件轉化為位封裝格式,節省原文件1/8 的存儲空間。
★ispTATM:萊迪思靜態時序分析器,是 ispDS+ HDL 綜合優化邏輯適配器的組成部分。包括所有的功能。使用方便,節省了大量時序分析的代價。設計者可以通過時序分析器方便地獲得任何萊迪思 ISP 器件的引腳到引腳的時序細節。通過一個展開清單格式方便地查看結果。
★ispVHDLTM:萊迪思開發系統。包括功能強大的 VHDL 語言和靈活的在系統可編程。完整的系統工具包括 Synopsys,Synplicity 和 Viewlogic,加上 ispDS+ HDL 綜合優化邏輯適配器。
★ispVM System:萊迪思半導體第二代器件下載工具。是基於能夠提供多供應商的可編程支持的攜帶型虛擬機概念設計的。提高了性能,增強了功能。
★JEDEC file(JEDEC 文件):用於對 ispLSI 器件編程的工業標准模式信息。
★JTAG(Joint Test Action Group-聯合測試行動組):一系列在主板加工過程中的對主板和晶元級進行功能驗證的標准。
★Logic(邏輯):集成電路的三個基本組成部分之一:微處理器內存和邏輯。邏輯是用來進行數據操作和控制功能的。
★Low Density PLD(低密度可編程邏輯器件):小於1000 門的 PLD,也稱作 SPLD。
★LUT (Look-Up Table-查找表):一種在 PFU 中的器件結構元素,用於組合邏輯和存儲。基本上是靜態存儲器(SRAM)單元。
★Macrocell(宏單元):邏輯單元組,包括基本的產品邏輯和附加的功能:如存儲單元、通路控制、極性和反饋路徑。
★MPI(MicroprocesSOr Interface-微處理器介面):ORCA 4 系列 FPGA 的器件結構特徵,使 FPGA 作為隨動或外圍器件與 PowerQUIC mP 介面。
★OLMC(Output Logic Macrocell-輸出邏輯宏單元):D 觸發器,在輸入端具有一個異或門,每一個 GLB 輸出可以任意配置成組合或寄存器輸出。
★ORCA(Optimized Reconfigurable Cell Array-經過優化的可被重新配置的單元陣列):一種萊迪思的 FPGA 器件。
★ORP(Output Routing Pool-輸出布線池):ORP 完成從 GLB 輸出到 I/O 單元的信號布線。I/O 單元將信號配置成輸出或雙向引腳。這種結構在分配、鎖定 I/O 引腳和信號出入器件的布線時提供了很大的靈活性。
★PAC(Programmable Analog Circuit-可編程模擬器件):模擬集成電路可以被用戶編程實現各種形式的傳遞函數。
★PFU(Programmable Function Unit-可編程功能單元):在 ORCA 器件的PLC中的單元,可用來實現組合邏輯、存儲、及寄存器功能。
★PIC (Programmable I/O Cell-可編程 I/O 單元):在 ORCA FPGA 器件上的一組四個 PIO。PIC 還包含充足的布線路由選擇資源。
★Pin(引腳):集成電路上的金屬連接點用來:
1)從集成電路板上接收和發送電信號;
2)將集成電路連接到電路板上。
★PIO(Programmable I/O Cell-可編程I/O單元):在 ORCA FPGA 器件內部的結構元素,用於控制實際的輸入及輸出功能。
★PLC(Programmable Logic Cell-可編程邏輯單元):這些單元是 ORCA FPGA 器件中的心臟部分,他們被均勻地分配在 ORCA FPGA 器件中,包括邏輯、布線、和補充邏輯互連單元(SLIC)。
★PLD(Programmable Logic Device-可編程邏輯器件):數字集成電路,能夠被用戶編程執行各種功能的邏輯操作。包括:SPLDs, CPLDs 和 FPGAS。
★Process Techonology(工藝技術):用來將空白的硅晶片轉換成包含成百上千個晶元的矽片加工工藝。通常按技術(如:E2CMOS)和線寬 (如:0.35 微米)分類。
★Programmer(編程器):通過插座實現傳統 PLD 編程的獨立電子設備。萊迪思 ISP 器件不需要編程器。
★Schematic Capture(原理圖輸入器):設計輸入的圖形化方法。
★SCUBA(SOFtware Compiler for User Programmable Arrays-用戶可編程陣列綜合編譯器):包含於 ORCA Foundry 內部的一種軟體工具,用於生成 ORCA 特有的可用參數表示的諸如存儲的宏單元。
★SLIC (Supplemental Logic Interconnect Cell-補充邏輯相互連接單元):包含於每一個 PLC 中,它們有類似 PLD 結構的三態、存儲解碼、及寬邏輯功能。
★SPLD(SPLD-簡單可編程邏輯器件):小於 1000 門的 PLD,也稱作低密度 PLD。
★SWL(SOFt-Wired Lookup Table-軟連接查找表):在 ORCA PFU 的查找表之間的快速、可編程連接,適用於很寬的組合功能。
★Tpd:傳輸延時符號,一個變化了的輸入信號引起一個輸出信號變化所需的時間。
★TQFP(Thin Quad Flat PACk-薄四方扁平封裝):一種集成電路的封裝類型,能夠極大地減少晶元在電路板上的佔用的空間。TQFP 是小空間應用的理想選擇,如:PCMCIA 卡。
★UltraMOS?:萊迪思半導體專用加工工藝技術。
★Verilog HDL:一個專用的、高級的、基於文本的設計輸入語言。
★VHDL:VHSIC 硬體描述語言,高級的基於文本的設計輸入語言。

B. 軟浮點與硬浮點有什麼區別

軟浮點是通過浮點庫去實現浮點運算的,效率低;硬浮點是通過浮點運算單元(FPU)來完成的,效率高。
(1)硬浮點(hard-float)
編譯器將代碼直接編譯成硬體浮點協處理器(浮點運算單元FPU)能識別的指令,這些指令在執行的時候ARM核直接把它轉給協處理器執行。FPU 通常有一套額外的寄存器來完成浮點參數傳遞和運算。使用實際的硬體浮點運算單元(FPU)會帶來性能的提升。
(2)軟浮點(soft-float)
編譯器把浮點運算轉成浮點運算的函數調用和庫函數調用,沒有FPU的指令調用,也沒有浮點寄存器的參數傳遞。浮點參數的傳遞也是通過ARM寄存器或者堆棧完成。現在的Linux系統默認編譯選擇使用hard-float,如果系統沒有任何浮點處理器單元,這就會產生非法指令和異常。因而一般的系統鏡像都採用軟浮點以兼容沒有VFP的處理器。

C. c語言在電腦裡面哪裡找如何在電腦上安裝c語言編程環境

『壹』 華為電腦怎麼找c語言
用文件編輯器尋找
如果是寫C語音代碼,用文件編輯器就可以了。但是windows默認是不帶C的編譯器,你需要安裝TurboC或者VisualStudio,這兩個是集成開發環境,帶了代碼編輯器和編譯器。
『貳』 電腦C語言編程軟體在哪裡下載
電腦里下載軟體可以用360軟體管家,裡面軟體很全,下載安裝一步到位,很方便
『叄』 如何在電腦上安裝C語言。
1、下載好一個安裝包,並解壓
『肆』 c語言在電腦里怎麼找
你是說編c語言的軟體嗎?你有沒有Microsoft Visual C++?
『伍』 如何在電腦上安裝c語言編程環境
c語言開發環境可以用Turbo C或者Visual C++ 等
關於Turbo C, 是不用安裝的, 直接在網上下載下來就可以
關於Visual C++, 其實這個環境的編譯器主要針對c++, 但是也兼容c, 所以也可以用. 這個需要安裝, 安裝好之後, 直接就可以用了.
由於Visual C++6.0在win7,win8存在兼容性問題,因此,右擊安裝程序選擇以管理員身份運行。
接著在彈出的窗口選擇是,在兼容性問題的對話框中把不再顯示此提示勾上,點確定
接著一路默認就行了
安裝完後,進入Visual C++6.0的安裝路徑C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE(一般默認是C盤,以自己選的安裝路徑為准)把MSDEV.EXE改成MSDEV1.EXE並右擊選屬性->兼容性,在兼容模式中把以兼容模式運行這個程序的勾勾上,並選windows XP(Service Park 2)或windows XP(Service Park 3),點擊確定。(win7不用把MSDEV.EXE改成MSDEV1.EXE)
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
『陸』 一個C語言程序怎樣在電腦上運行
你安裝一個程序,我用的是win
tc
你可以上網搜。安裝後
你把代碼貼道win
tc中,進行編譯即可
它會自己輸出
『柒』 C語言程序怎麼安裝在電腦上
你是要C語言的IDE吧?
我原來用VC6++,找了個下載地址。
VC6.0中文版迅雷下載地址(用迅雷下載):
ftp://221.214.14.241/pvc6.rar

下載後是個壓縮包,雙擊壓縮包,出來解壓界面,雙擊那個VC60文件夾,裡面有很多文件夾和文件,仔細找見SETUP.EXE那個文件,雙擊就開始正式安裝了,安裝需要一點時間,之後出來對話框,如果自己不懂的一直點「下一步」和
「繼續」進行安裝。
裡面有VB
,VC++6.0
,V
foxpro等組件!這些都可以選擇用。例如你參加全國二級C語言考試,你就可以直接選安裝組件中的C,不必全選,但有的是必選,到時系統會提示你。其中安裝序列號全是1,切記!!!
不過現在有也有VC++8.0
下載地址:
http://www.xdowns.com/soft/38/121/2008/Soft_43859.html
『捌』 c語言用什麼編寫,電腦中可以找的到嗎
不是c語言是一種編程語言,它有各種編譯環境,liunx上好像是帶的叫什麼gcc,windows上絕對找不到得要單獨安裝!!!
『玖』 C語言的庫函數在電腦的哪裡
你裝的什麼編譯器?裝的位置在哪?庫函數包含在Include文件夾裡面,找到文件夾就行了,望採納。
『拾』 怎樣在電腦上進行C語言編程
這里常見的VC
6.0編譯器作為例子,舉例C語言編程的步驟,其他編譯器與之類似:
1、打開VC++6.0;
2、在文件里點新建,然後在projects里選擇win
32
console
application;
3、然後再次點文件的新建,然後在files里選擇C++source
file;
4、一直默認下一步就好了,然後就可以寫代碼;
5。寫好代碼後,點擊那個感嘆號就可以運行,或者直接按快捷鍵F9也可以運行。

D. 什麼叫"software"

software
1. 【電腦】軟體
My job is writing the software.
我的工作是寫軟體。
2. (跟隨電子設備的)程序材料

什麼是軟體?硬體是什麼?
電腦軟體,是人們為了告訴電腦要做什麼事而編寫的,電腦能夠理解的一串指令,有時也叫代碼、程序。

根據功能的不同,電腦軟體可以粗略地分成四個層次。最貼近電腦硬體的是一些小巧的軟體。它們實現一些最基本的功能,通常「固化」在只讀存儲器晶元中,因此稱為固件。系統軟體包括操作系統和編譯器軟體等。系統軟體和硬體一起提供一個「平台」。它們管理和優化電腦硬體資源的使用。常見的中間件包括資料庫和萬維網伺服器等,它們在應用軟體和平台之間建立一種橋梁。應用軟體種類最多,包括辦公軟體、電子商務軟體、通信軟體、行業軟體,游戲軟體等等。

電腦軟體都是用各種電腦語言(也叫程序設計語言)編寫的。最底層的叫機器語言,它由一些0和1組成,可以被某種電腦直接理解,但人就很難理解。上面一層叫匯編語言,它只能由某種電腦的匯編器軟體翻譯成機器語言程序,才能執行。人能夠勉強理解匯編語言。人常用的語言是更上一層的高級語言,比如C, java, Fortran, BASIC。這些語言編寫的程序一般都能在多種電腦上運行,但必須先由一個叫作編譯器或者是解釋器的軟體將高級語言程序翻譯成特定的機器語言程序。編寫電腦軟體的人員叫程序設計員、程序員、編程人員。他們當中的高手有時也自稱為黑客。

由於機器語言程序是由一些0和1組成的,它又被稱為二進制代碼。匯編語言和高級語言程序也被稱為源碼。在實際工作中,一般來講,編程人員必須要有源碼才能理解和修改一個程序。很多軟體廠家只出售二進制代碼。近年來,國際上開始流行一種趨勢,即將軟體的源碼公開,供全世界的編程人員共享。這叫「開放源碼運動」。

軟體是什麼?硬體是什麼?軟、硬體之間的區別 ?

硬體就是實際的硬體設備如:內存條、CPU、顯示器、……。
軟體就是我們平常用的如瑞星、OFFICE、等等。
沒有軟體的計算機,也叫「裸機」,可以說是廢鐵一堆。
軟體可分為專用軟體和通用軟體。通用軟體和操作系統,專用的軟體如PS,DW。

1、軟體:其實很好理解,就如同是一個人思想和靈魂。要是沒有它的話,那麼再好的電腦也沒什麼太大的用處,放在家裡就等於是廢鐵。
2、硬體:它如同是一個人的身軀。如果身體也沒了,再好創意和思想也無法最大限度的發揮,辦起事情來總有不便。
總結:對於電腦來說,軟體是思想和靈魂,硬體就是身軀。如同一個人既要有健康的思想,也要有強壯的身軀。所以它們之間不可分割的一個整體。

二、補丁只是系統程序和應用程序的升級補充,是用來安裝後防止漏洞,增加安全性的,不是拿來使用

E. java三個引用類型

四種引用類型
所以在 JDK.1.2 之後,Java 對引用的概念進行了擴充,將引用分為了:強引用(Strong Reference)、軟引用(Soft Reference)、弱引用(Weak Reference)、虛引用(Phantom Reference)4 種,這 4 種引用的強度依次減弱。

一,強引用
Java中默認聲明的就是強引用,比如:

Object obj = new Object(); //只要obj還指向Object對象,Object對象就不會被回收
obj = null; //手動置null
只要強引用存在,垃圾回收器將永遠不會回收被引用的對象,哪怕內存不足時,JVM也會直接拋出OutOfMemoryError,不會去回收。如果想中斷強引用與對象之間的聯系,可以顯示的將強引用賦值為null,這樣一來,JVM就可以適時的回收對象了

二,軟引用
軟引用是用來描述一些非必需但仍有用的對象。在內存足夠的時候,軟引用對象不會被回收,只有在內存不足時,系統則會回收軟引用對象,如果回收了軟引用對象之後仍然沒有足夠的內存,才會拋出內存溢出異常。這種特性常常被用來實現緩存技術,比如網頁緩存,圖片緩存等。
在 JDK1.2 之後,用java.lang.ref.SoftReference類來表示軟引用。

下面以一個例子來進一步說明強引用和軟引用的區別:
在運行下面的Java代碼之前,需要先配置參數 -Xms2M -Xmx3M,將 JVM 的初始內存設為2M,最大可用內存為 3M。

首先先來測試一下強引用,在限制了 JVM 內存的前提下,下面的代碼運行正常

public class TestOOM {

public static void main(String[] args) {
testStrongReference();
}
private static void testStrongReference() {
// 當 new byte為 1M 時,程序運行正常
byte[] buff = new byte[1024 * 1024 * 1];
}
}
但是如果我們將

byte[] buff = new byte[1024 * 1024 * 1];
替換為創建一個大小為 2M 的位元組數組

byte[] buff = new byte[1024 * 1024 * 2];
則內存不夠使用,程序直接報錯,強引用並不會被回收

接著來看一下軟引用會有什麼不一樣,在下面的示例中連續創建了 10 個大小為 1M 的位元組數組,並賦值給了軟引用,然後循環遍歷將這些對象列印出來。

public class TestOOM {
private static List<Object> list = new ArrayList<>();
public static void main(String[] args) {
testSoftReference();
}
private static void testSoftReference() {
for (int i = 0; i < 10; i++) {
byte[] buff = new byte[1024 * 1024];
SoftReference<byte[]> sr = new SoftReference<>(buff);
list.add(sr);
}

System.gc(); //主動通知垃圾回收

for(int i=0; i < list.size(); i++){
Object obj = ((SoftReference) list.get(i)).get();
System.out.println(obj);
}

}

}
列印結果:

我們發現無論循環創建多少個軟引用對象,列印結果總是只有最後一個對象被保留,其他的obj全都被置空回收了。
這里就說明了在內存不足的情況下,軟引用將會被自動回收。
值得注意的一點 , 即使有 byte[] buff 引用指向對象, 且 buff 是一個strong reference, 但是 SoftReference sr 指向的對象仍然被回收了,這是因為Java的編譯器發現了在之後的代碼中, buff 已經沒有被使用了, 所以自動進行了優化。
如果我們將上面示例稍微修改一下:

private static void testSoftReference() {
byte[] buff = null;

for (int i = 0; i < 10; i++) {
buff = new byte[1024 * 1024];
SoftReference<byte[]> sr = new SoftReference<>(buff);
list.add(sr);
}

System.gc(); //主動通知垃圾回收

for(int i=0; i < list.size(); i++){
Object obj = ((SoftReference) list.get(i)).get();
System.out.println(obj);
}

System.out.println("buff: " + buff.toString());
}

則 buff 會因為強引用的存在,而無法被垃圾回收,從而拋出OOM的錯誤。

如果一個對象惟一剩下的引用是軟引用,那麼該對象是軟可及的(softly reachable)。垃圾收集器並不像其收集弱可及的對象一樣盡量地收集軟可及的對象,相反,它只在真正 「需要」 內存時才收集軟可及的對象。

三,弱引用
弱引用的引用強度比軟引用要更弱一些,無論內存是否足夠,只要 JVM 開始進行垃圾回收,那些被弱引用關聯的對象都會被回收。在 JDK1.2 之後,用 java.lang.ref.WeakReference 來表示弱引用。
我們以與軟引用同樣的方式來測試一下弱引用:

private static void testWeakReference() {
for (int i = 0; i < 10; i++) {
byte[] buff = new byte[1024 * 1024];
WeakReference<byte[]> sr = new WeakReference<>(buff);
list.add(sr);
}

System.gc(); //主動通知垃圾回收

for(int i=0; i < list.size(); i++){
Object obj = ((WeakReference) list.get(i)).get();
System.out.println(obj);
}
}
列印結果:

可以發現所有被弱引用關聯的對象都被垃圾回收了。

四,虛引用
虛引用是最弱的一種引用關系,如果一個對象僅持有虛引用,那麼它就和沒有任何引用一樣,它隨時可能會被回收,在 JDK1.2 之後,用 PhantomReference 類來表示,通過查看這個類的源碼,發現它只有一個構造函數和一個 get() 方法,而且它的 get() 方法僅僅是返回一個null,也就是說將永遠無法通過虛引用來獲取對象,虛引用必須要和 ReferenceQueue 引用隊列一起使用。

public class PhantomReference<T> extends Reference<T> {
/**
* Returns this reference object's referent. Because the referent of a
* phantom reference is always inaccessible, this method always returns
* <code>null</code>.
*
* @return <code>null</code>
*/
public T get() {
return null;
}
public PhantomReference(T referent, ReferenceQueue<? super T> q) {
super(referent, q);
}
}
那麼傳入它的構造方法中的 ReferenceQueue 又是如何使用的呢?

五,引用隊列(ReferenceQueue)
引用隊列可以與軟引用、弱引用以及虛引用一起配合使用,當垃圾回收器准備回收一個對象時,如果發現它還有引用,那麼就會在回收對象之前,把這個引用加入到與之關聯的引用隊列中去。程序可以通過判斷引用隊列中是否已經加入了引用,來判斷被引用的對象是否將要被垃圾回收,這樣就可以在對象被回收之前採取一些必要的措施。

閱讀全文

與soft編譯器相關的資料

熱點內容
加密穩定幣怎麼樣 瀏覽:73
為什麼安卓系統不能直接運行 瀏覽:676
安卓輸入口什麼樣 瀏覽:986
pythonweb模塊不輸出 瀏覽:321
交換機埠狀態命令 瀏覽:30
安卓手機更新游戲為什麼比蘋果早 瀏覽:15
加密交易平台排名 瀏覽:93
python多線程採集 瀏覽:440
python中numpy模塊安裝 瀏覽:358
安卓虛擬機linux 瀏覽:569
安卓怎麼分享五g網路 瀏覽:671
什麼型號的板子能上伺服器內存 瀏覽:399
androidapk圖標設置 瀏覽:44
最早提出分數運演算法的著作 瀏覽:922
安卓郵箱怎麼保存照片 瀏覽:269
hdfspythonapi 瀏覽:851
qt如何搭建web伺服器 瀏覽:58
程序員紅包演算法 瀏覽:792
亞馬遜安全的更換雲伺服器 瀏覽:728
伺服器線程數怎麼設置 瀏覽:605