导航:首页 > 源码编译 > 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编译器相关的资料

热点内容
加密稳定币怎么样 浏览:69
为什么安卓系统不能直接运行 浏览:676
安卓输入口什么样 浏览:980
pythonweb模块不输出 浏览:321
交换机端口状态命令 浏览:30
安卓手机更新游戏为什么比苹果早 浏览:13
加密交易平台排名 浏览:91
python多线程采集 浏览:440
python中numpy模块安装 浏览:358
安卓虚拟机linux 浏览:567
安卓怎么分享五g网络 浏览:671
什么型号的板子能上服务器内存 浏览:399
androidapk图标设置 浏览:42
最早提出分数运算法的着作 浏览:922
安卓邮箱怎么保存照片 浏览:269
hdfspythonapi 浏览:851
qt如何搭建web服务器 浏览:58
程序员红包算法 浏览:792
亚马逊安全的更换云服务器 浏览:728
服务器线程数怎么设置 浏览:605