精华内容
下载资源
问答
  • 内存分类以及各自特征

    千次阅读 2020-03-11 21:04:05
    内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,...

    先说内存的含义:

    内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。 内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的。

    只读存储器(ROM)

    ROM是线路最简单半导体电路,通过掩模工艺,一次性制造,在元件正常工作的情况下,其中的代码与数据将永久保存,并且不能够进行修改。一般应用于PC系统的程序码、主机板上的 BIOS (基本输入/输出系统Basic Input/Output System)等。它的读取速度比RAM慢很多。

    根据组成元件的不同,ROM内存又分为以下五种:

    1.MASK ROM(掩模型只读存储器)

    制造商为了大量生产ROM内存,需要先制作一颗有原始数据的ROM或EPROM作为样本,然后再大量复制,这一样本就是MASK ROM,而烧录在MASK ROM中的资料永远无法做修改。它的成本比较低。

    2.PROM(Programmable ROM,可编程只读存储器)

    这是一种可以用刻录机将资料写入的ROM内存,但只能写入一次,所以也被称为“一次可编程只读存储器”(One Time Progarmming ROM,OTP-ROM)。PROM在出厂时,存储的内容全为1,用户可以根据需要将其中的某些单元写入数据0(部分的PROM在出厂时数据全为0,则用户可以将其中的部分单元写入1), 以实现对其“编程”的目的。

    3.EPROM(Erasable Programmable,可擦可编程只读存储器)

    这是一种具有可擦除功能,擦除后即可进行再编程的ROM内存,写入前必须先把里面的内容用紫外线照射它的IC卡上的透明视窗的方式来清除掉。这一类芯片比较容易识别,其封装中包含有“石英玻璃窗”,一个编程后的EPROM芯片的“石英玻璃窗”一般使用黑色不干胶纸盖住, 以防止遭到阳光直射。

    4.EEPROM(Electrically Erasable Programmable,电可擦可编程只读存储器)

    功能与使用方式与EPROM一样,不同之处是清除数据的方式,它是以约20V的电压来进行清除的。另外它还可以用电信号进行数据写入。这类ROM内存多应用于即插即用(PnP)接口中。

    5.Flash Memory(快闪存储器)

    这是一种可以直接在主机板上修改内容而不需要将IC拔下的内存,当电源关掉后储存在里面的资料并不会流失掉,在写入资料时必须先将原本的资料清除掉,然后才能再写入新的资料,缺点为写入资料的速度太慢。

    随机存储器(RAM)

    01.DRAM(Dynamic RAM,动态随机存取存储器):

    这是最普通的RAM,一个电子管与一个电容器组成一个位存储单元,DRAM将每个内存位作为一个电荷保存在位存储单元中,用电容的充放电来做储存动作,但因电容本身有漏电问题,因此必须每几微秒就要刷新一次,否则数据会丢失。存取时间和放电时间一致,约为2~4ms。因为成本比较便宜,通常都用作计算机内的主存储器。

    02.SRAM(Static RAM,静态随机存取存储器)

    静态,指的是内存里面的数据可以长驻其中而不需要随时进行存取。每6颗电子管组成一个位存储单元,因为没有电容器,因此无须不断充电即可正常运作,因此它可以比一般的动态随机处理内存处理速度更快更稳定,往往用来做高速缓存。

    03.VRAM(Video RAM,视频内存)

    它的主要功能是将显卡的视频数据输出到数模转换器中,有效降低绘图显示芯片的工作负担。它采用双数据口设计,其中一个数据口是并行式的数据输出入口,另一个是串行式的数据输出口。多用于高级显卡中的高档内存。

    04.FPM DRAM(Fast Page Mode DRAM,快速页切换模式动态随机存取存储器)

    改良版的DRAM,大多数为72Pin或30Pin的模块。传统的DRAM在存取一个BIT的数据时,必须送出行地址和列地址各一次才能读写数据。而FRM DRAM在触发了行地址后,如果CPU需要的地址在同一行内,则可以连续输出列地址而不必再输出行地址了。由于一般的程序和数据在内存中排列的地址是连续的,这种情况下输出行地址后连续输出列地址就可以得到所需要的数据。FPM将记忆体内部隔成许多页数Pages,从512B到数KB不等,在读取一连续区域内的数据时,就可以通过快速页切换模式来直接读取各page内的资料,从而大大提高读取速度。在96年以前,在486时代和PENTIUM时代的初期,FPM DRAM被大量使用。

    05.EDO DRAM(Extended Data Out DRAM,延伸数据输出动态随机存取存储器)

    这是继FPM之后出现的一种存储器,一般为72Pin、168Pin的模块。它不需要像FPM DRAM那样在存取每一BIT 数据时必须输出行地址和列地址并使其稳定一段时间,然后才能读写有效的数据,而下一个BIT的地址必须等待这次读写操作完成才能输出。因此它可以大大缩短等待输出地址的时间,其存取速度一般比FPM模式快15%左右。它一般应用于中档以下的Pentium主板标准内存,后期的486系统开始支持EDO DRAM,到96年后期,EDO DRAM开始执行。。

    06.BEDO DRAM(Burst Extended Data Out DRAM,爆发式延伸数据输出动态随机存取存储器)

    这是改良型的EDO DRAM,是由美光公司提出的,它在芯片上增加了一个地址计数器来追踪下一个地址。它是突发式的读取方式,也就是当一个数据地址被送出后,剩下的三个数据每一个都只需要一个周期就能读取,因此一次可以存取多组数据,速度比EDO DRAM快。但支持BEDO DRAM内存的主板可谓少之又少,只有极少几款提供支持(如VIA APOLLO VP2),因此很快就被DRAM取代了。

    07.MDRAM(Multi-Bank DRAM,多插槽动态随机存取存储器)

    MoSys公司提出的一种内存规格,其内部分成数个类别不同的小储存库 (BANK),也即由数个属立的小单位矩阵所构成,每个储存库之间以高于外部的资料速度相互连接,一般应用于高速显示卡或加速卡中,也有少数主机板用于L2高速缓存中。

    08.WRAM(Window RAM,窗口随机存取存储器)

    韩国Samsung公司开发的内存模式,是VRAM内存的改良版,不同之处是它的控制线路有一、二十组的输入/输出控制器,并采用EDO的资料存取模式,因此速度相对较快,另外还提供了区块搬移功能(BitBlt),可应用于专业绘图工作上。

    09.RDRAM(Rambus DRAM,高频动态随机存取存储器)

    Rambus公司独立设计完成的一种内存模式,速度一般可以达到500~530MB/s,是DRAM的10倍以上。但使用该内存后内存控制器需要作相当大的改变,因此它们一般应用于专业的图形加速适配卡或者电视游戏机的视频内存中。

    10.SDRAM(Synchronous DRAM,同步动态随机存取存储器)

    这是一种与CPU实现外频Clock同步的内存模式,一般都采用168Pin的内存模组,工作电压为3.3V。 所谓clock同步是指内存能够与CPU同步存取资料,这样可以取消等待周期,减少数据传输的延迟,因此可提升计算机的性能和效率。

    11.SGRAM(Synchronous Graphics RAM,同步绘图随机存取存储器)

    SDRAM的改良版,它以区块Block,即每32bit为基本存取单位,个别地取回或修改存取的资料,减少内存整体读写的次数,另外还针对绘图需要而增加了绘图控制器,并提供区块搬移功能(BitBlt),效率明显高于SDRAM。

    12.SB SRAM(Synchronous Burst SRAM,同步爆发式静态随机存取存储器)

    一般的SRAM是非同步的,为了适应CPU越来越快的速度,需要使它的工作时脉变得与系统同步,这就是SB SRAM产生的原因。

    13.PB SRAM(Pipeline Burst SRAM,管线爆发式静态随机存取存储器)

    CPU外频速度的迅猛提升对与其相搭配的内存提出了更高的要求,管线爆发式SRAM取代同步爆发式SRAM成为必然的选择,因为它可以有效地延长存取时脉,从而有效提高访问速度。

    14.DDR SDRAM(Double Data Rate二倍速率同步动态随机存取存储器)

    作为SDRAM的换代产品,它具有两大特点:其一,速度比SDRAM有一倍的提高;其二,采用了DLL(Delay Locked Loop:延时锁定回路)提供一个数据滤波信号。这是目前内存市场上的主流模式。

    15.SLDRAM (Synchronize Link,同步链环动态随机存取存储器)

    这是一种扩展型SDRAM结构内存,在增加了更先进同步电路的同时,还改进了逻辑控制电路,不过由于技术显示,投入实用的难度不小。

    16.CDRAM(CACHED DRAM,同步缓存动态随机存取存储器)

    这是三菱电气公司首先研制的专利技术,它是在DRAM芯片的外部插针和内部DRAM之间插入一个SRAM作为二级CACHE使用。当前,几乎所有的CPU都装有一级CACHE来提高效率,随着CPU时钟频率的成倍提高,CACHE不被选中对系统性能产生的影响将会越来越大,而CACHE DRAM所提供的二级CACHE正好用以补充CPU一级CACHE之不足,因此能极大地提高CPU效率。

    17.DDRII (Double Data Rate Synchronous DRAM,第二代同步双倍速率动态随机存取存储器)

    DDRII 是DDR原有的SLDRAM联盟于1999年解散后将既有的研发成果与DDR整合之后的未来新标准。DDRII的详细规格目前尚未确定。

    18.DRDRAM (Direct Rambus DRAM)

    是下一代的主流内存标准之一,由Rambus 公司所设计发展出来,是将所有的接脚都连结到一个共同的Bus,这样不但可以减少控制器的体积,已可以增加资料传送的效率。
    还要介绍一下最新的 我们大部分知道的 DDR3与DDR4

    DDR3:

    2005年制造出DDR3的原型产品。2007年,市场开始使用DDR3内存芯片。

    与DDR2相比,DDR3采用8bit预取,因此提供更高的传输速率(2133MT/s);更低的工作电压(1.5V,DDR2工作电压为1.8V),另外采用了不同的封装工艺,因此能耗更低。

    延迟周期同样比DDR2增长,引脚数增加。

    DDR4:

    2011年,samsung宣布生产出第一个DDR4内存模块。2012年,samsung、Micron等开始量产DDR4 SDRAM芯片。

    与DDR3相比,DDR4提供更高的时钟频率和传输速率(4166MT/s);更低的工作电压(1.05~1.2V),因此能耗更低。

    高速缓冲存储器(CACHE)

    高速缓冲存储器cache一般采用随机存取方式。
      高速缓冲存储器cache工作时,cache能够根据指令地址得到cache中对应地址,按地址存取,因此它是随机存取。

    高速缓冲存储器(Cache)其原始意义是指存取速度比一般随机存取记忆体(RAM)来得快的一种RAM,一般而言它不像系统主记忆体那样使用DRAM技术,而使用昂贵但较快速的SRAM技术,也有快取记忆体的名称。
      高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。在计算机存储系统的层次结构中,是介于中央处理器和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。
      高速缓冲存储器最重要的技术指标是它的命中率
    这个比较陌生,给一个总结的文章链接:高速缓冲存储器cache介绍

    FLASH

    FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)

    目前Flash主要有两种NOR FlashNADN Flash

    NOR Flash:NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。一般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息。NOR FLASH数据线和地址线分开,可以实现RAM一样的随机寻址功能,可以读取任何一个字节,但是擦除仍要按块来擦。

    NADN Flash:没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。大容量的用NAND FLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和我们通常用的"闪盘",可以在线擦除。NAND FLASH同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址。读取只能按页来读取。(NAND FLASH按块来擦除,按页来读,NOR FLASH没有页)。由于NAND FLASH引脚上复用,因此读取速度比NOR FLASH慢一点,但是擦除和写入速度比NOR FLASH快很多。NAND FLASH内部电路更简单,因此数据密度大,体积小,成本也低。因此大容量的flash都是NAND FLASH型的。小容量的2~12M的flash多是NOR FLASH型的。

    来一个两种flash的比较
    NOR flash 和NAND flash区别深入分析

    此外还有新起之秀 EMMC
    emmc存储器eMMC (Embedded Multi Media Card) 为MMC协会所订立的,eMMC 相当于 NandFlash+主控IC ,对外的接口协议与SD、TF卡一样,主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间。这些特点对于希望通过缩小光刻尺寸和降低成本的NAND供应商来说,同样的重要。
    eMMC由一个嵌入式存储解决方案组成,带有MMC(多媒体卡)接口、快闪存储器设备(Nand Flash)及主控制器,所有都在一个小型的BGA 封装。接口速度高达每秒52MBytes,eMMC具有快速、可升级的性能。同时其接口电压可以是 1.8v 或者是 3.3v。

    现在很多智能电视已经逐步抛弃Nor或Nand,使用更为先进的eMMC芯片,然而普通编程器无法读写eMMC芯片,新开发的可支持eMMC芯片烧写的编程器性价比高,还能支持Nor、Nand芯片,支持全面、功能强大

    展开全文
  • 内存分类

    千次阅读 2018-02-12 21:29:34
    为了加快系统的速度,提高系统的整体性能,我们看到,计算机中配置的内存数量越来越大,而内存的种类也越来越多。 内存新技术 计算机指令的存取时间主要取决于内存。对于现今的大多数计算机系统,内存的存取时间都...
    同步SRMA比异步SRAM更快。
    
     内存,或内存储器,又称为主存储器,是关系到计算机运行性能高低的关键部件之一,无疑是非常重要的。为了加快系统的速度,提高系统的整体性能,我们看到,计算机中配置的内存数量越来越大,而内存的种类也越来越多。 

     内存新技术 

     计算机指令的存取时间主要取决于内存。对于现今的大多数计算机系统,内存的存取时间都是一个主要的制约系统性能提高的因素。因此在判断某一系统的性能时,就不能单凭内存数量的大小,还要看一看其所用内存的种类,工作速度。 

     有关内存的名词 
     关于内存的名词众多。为了便于读者查阅,下面集中进行介绍。 
     ROM:只读存储器 
     RAM(Random Access Memory):随机存储器 
     DRAM(Dynamic RAM):动态随机存储器 
     PM RAM(Page Mode RAM):页模式随机存储器(即普通内存) 
     FPM RAM(Fast Page Mode RAM):快速页模式随机存储器 
     EDO RAM(Extended Data Output RAM)扩充数据输出随机存储器 
     BEDO RAM(Burst Extended Data Output RAM):突发扩充数据输出随机存储器 
     SDRAM(Sychronous Dynamic RAM):同步动态随机存储器 
     SRAM(Static RAM):静态随机存储器 
     Async SRAM(Asynchronous Static RAM):异步静态随机存储器 
     Sync Burst SRAM(Synchronous Burst Stacic RAM):同步突发静态随机存储器 
     PB SRAM(Pipelined Burst SRAM):管道(流水线)突发静态随机存储器 
     Cache:高速缓存 
     L2 Cache(Level 2 Cache):二级高速缓存(通常由SRAM组成) 
     VRAM(Video RAM):视频随机存储器 
     CVRAM(Cached Vedio RAM):缓存型视频随机存储器 
     SVRAM(Synchronous VRAM):同步视频随机存储器 
     CDRAM(Cached DRAM):缓存型动态随机存储器 
     EDRAM(Enhanced DRAM):增强型动态随机存储器 

     各种内存及技术特点 
     DRAM 动态随机存储器 
     DRAM主要用作主存储器。长期以来,我们所用的动态随机存储器都是PM RAM,稍晚些的为FPM RAM。为了跟上CPU越来越快的速度,一些新类型的主存储器被研制出来。它们是EDO RAM、BEDO RAM、SDRAM等。 
     DRAM芯片设计得象一个二进制位的矩阵,每一个位有一个行地址一个列地址。内存控制器要给出芯片地址才能从芯片中读出指定位的数据。一个标明为70ns的芯片要用70ns的时间读出一个位的数据。并且还要用额外的时间从CPU得到地址信息设置下一条指令。芯片制作技术的不断进步使这种处理效率越来越高。 

     FPM RAM 快速页模式随机存储器 
     这里的所谓“页”,指的是DRAM芯片中存储阵列上的2048位片断。FPM RAM是最早的随机存储器,在过去一直是主流PC机的标准配置,以前我们在谈论内存速度时所说的“杠7”,“杠6”,指的即是其存取时间为70ns,60ns。60ns的FPM RAM可用于总线速度为66MHz(兆赫兹)的奔腾系统(CPU主频为100,133,166和200MHz)。 
     快速页模式的内存常用于视频卡,通常我们也叫它“DRAM”。其中一种经过特殊设计的内存的存取时间仅为48ns,这时我们就叫它VRAM。这种经过特殊设计的内存具有“双口”,其中一个端口可直接被CPU存取,而另一个端口可独立地被RAM“直接存取通道”存取,这样存储器的“直接存取通道”不必等待CPU完成存取就可同时工作,从而比一般的DRAM要快些。 

     EDO RAM 扩充数据输出随机存储器 
     在DRAM芯片之中,除存储单元之外,还有一些附加逻辑电路,现在,人们已注意到RAM芯片的附加逻辑电路,通过增加少量的额外逻辑电路,可以提高在单位时间内的数据流量,即所谓的增加带宽。EDO正是在这个方面作出的尝试。扩展数据输出(Extended data out??EDO,有时也称为超页模式??hyper-page-mode
    展开全文
  • 什么内存

    2020-11-18 16:34:12
     一、内存的作用与分类 内存是电脑中的主要部件,它是相对于外存而言的。我们平常使用的程序,如Windows98系统、打字软件、游戏软件等,一般都是安装在硬盘等外存上的,但仅此是不能使用其功能的,必须把它们调入...
  • GPU内存分类

    千次阅读 2017-10-10 11:50:20
    全局内存 通俗意义上的设备内存。 共享内存 1. 位置:设备内存。 2. 形式:关键字__shared__添加到变量声明中。如__shared__ float cache[10] 3. 目的:对于GPU上启动的每个线程块,CUDA C编译器都将创建该共享...
    全局内存
    
    通俗意义上的设备内存。
    共享内存
    1. 位置:设备内存。
    2. 形式:关键字 __shared__添加到变量声明中。如 __shared__ float cache[10]
    3. 目的:对于GPU上启动的每个线程块,CUDA C编译器都将创建该共享变量的一个副本。线程块中的每个线程都共享这块内存,但线程却无法看到也不能修改其他线程块的变量副本。这样使得一个线程块中的多个线程能够在计算上通信和协作。
    常量内存
    1. 位置:设备内存
    2. 形式:关键字 __constant__添加到变量声明中。如 __constant__ float s[10]
    3. 目的:为了提升性能。常量内存采取了不同于标准全局内存的处理方式。在某些情况下,用常量内存替换全局内存能有效地减少内存带宽。
    4. 特点:常量内存用于保存在核函数执行期间不会发生变化的数据。变量的访问限制为只读。NVIDIA硬件提供了64KB的常量内存。不再需要cudaMalloc()或者cudaFree(),而是在编译时,静态地分配空间。
    5. 要求:当我们需要拷贝数据到常量内存中应该使用 cudaMemcpyToSymbol(),而 cudaMemcpy()会复制到全局内存。
    6. 性能提升的原因:
    6.1. 对常量内存的单次读操作可以广播到其他的“邻近”线程。这将节约15次读取操作。(为什么是15,因为“邻近”指半个线程束,一个线程束包含32个线程的集合。)
    6.2. 常量内存的数据将缓存起来,因此对相同地址的连续读操作将不会产生额外的内存通信量。
    纹理内存
    1. 位置:设备内存

    2. 目的:能够减少对内存的请求并提供高效的内存带宽。是专门为那些在内存访问模式中存在大量空间局部性的图形应用程序设计,意味着一个线程读取的位置可能与邻近线程读取的位置“非常接近”。如下图:

    3. 纹理变量(引用)必须声明为文件作用域内的全局变量。
    4. 形式:分为一维纹理内存 和 二维纹理内存。
    4.1. 一维纹理内存
    4.1.1. 用texture<类型>类型声明,如texture<float> texIn。
    4.1.2. 通过cudaBindTexture()绑定到纹理内存中。
    4.1.3. 通过tex1Dfetch()来读取纹理内存中的数据。
    4.1.4. 通过cudaUnbindTexture()取消绑定纹理内存。
    4.2. 二维纹理内存
    4.2.1. 用texture<类型,数字>类型声明,如texture<float,2> texIn。
    4.2.2. 通过cudaBindTexture2D()绑定到纹理内存中。
    4.2.3. 通过tex2D()来读取纹理内存中的数据。
    4.2.4. 通过cudaUnbindTexture()取消绑定纹理内存。

    固定内存
    1. 位置:主机内存。
    2. 概念:也称为页锁定内存或者不可分页内存,操作系统将不会对这块内存分页并交换到磁盘上,从而确保了该内存始终驻留在物理内存中。因此操作系统能够安全地使某个应用程序访问该内存的物理地址,因为这块内存将不会破坏或者重新定位。
    3. 目的:提高访问速度。由于GPU知道主机内存的物理地址,因此可以通过“直接内存访问DMA(Direct Memory Access)技术来在GPU和主机之间复制数据。由于DMA在执行复制时无需CPU介入。因此DMA复制过程中使用固定内存是非常重要的。
    4. 缺点:使用固定内存,将失去虚拟内存的所有功能;系统将更快的耗尽内存。
    5. 建议:对cudaMemcpy()函数调用中的源内存或者目标内存,才使用固定内存,并且在不再需要使用它们时立即释放。
    6. 形式:通过cudaHostAlloc()函数来分配;通过cudaFreeHost()释放。
    7. 只能以异步方式对固定内存进行复制操作。
    原子性
    1. 概念:如果操作的执行过程不能分解为更小的部分,我们将满足这种条件限制的操作称为原子操作。
    2. 形式:函数调用,如atomicAdd(addr,y)将生成一个原子的操作序列,这个操作序列包括读取地址addr处的值,将y增加到这个值,以及将结果保存回地址addr。

    展开全文
  • 行业分类-物理装置-一种基于内存行为特征的视频监控设备攻击检测系统.zip
  • java内存泄漏分类及避免

    千次阅读 2016-09-06 20:39:22
    内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的。...

    要点

    • 内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的。 
    • 内存泄漏可以分为4类:

    1) 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。

    2) 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。

    3) 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。

    4) 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

    • 内存溢出类型

    1) java.lang.OutOfMemoryError: PermGen space

    PermGen space 的全称是 Permanent Generation space, 是指内存的永久保存区域。这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC不会在主程序运行期对PermGen space进行清理。

     

    JVM由XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;

    JVM由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

     

    该错误常见场合:

    a) 应用中有很多Class,web服务器对JSP进行precompile时。

    b) Webapp下用了大量的第三方jar,其大小超过了JVM默认的大小(4M)时。

     

    2) java.lang.OutOfMemoryError:Java heap space

     

    在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。

     

    JVM初始分配的内存由-Xms指定,默认是物理内存的1/64; 

    JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。 

     

    JVM内存的最大值跟操作系统有很大的关系。32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。

    注意:如果Xms超过了Xmx值,或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。 

    该错误常见场合:

    a) Web上传文件时。

    b) 开启大型文件或从数据库中一次取了太多的数据。 
     

     

    相关问题

    1. Q: Java中会存在内存泄漏吗?
       
    A:  Java中也存在内存泄露。当被分配的对象可达但已无用(未对作废数据内存单元的引用置null)即会引起。

             如:

    Java代码

    1. Vector v=new Vector(10);    
    2. for (int i=1;i<100; i ) {    
    3.     Object o=new Object();    
    4.     v.add(o);    
    5.     o=null;    
    6. }    
    7. // 此时,所有的Object对象都没有被释放,因为变量v引用这些对象。    
    8. // 对象加入到Vector后,还必须从Vector中删除,最简单释放方法就是将Vector对象设置为null。   

    Vector v=new Vector(10); for(int i=1;i<100; i ) { Object o=new Object(); v.add(o); o=null; } // 此时,所有的Object对象都没有被释放,因为变量v引用这些对象。 // 对象加入到Vector后,还必须从Vector中删除,最简单释放方法就是将Vector对象设置为null。

     

     

    2. Q: 内存泄露、溢出的异同? 

         A: 同:都会导致应用程序运行出现问题,性能下降或挂起。

             异:

             1) 内存泄露是导致内存溢出的原因之一;内存泄露积累起来将导致内存溢出。

             2) 内存泄露可以通过完善代码来避免;内存溢出可以通过调整配置来减少发生频率,但无法彻底避免。

            

     

    3. 如何检测内存泄露?   

     

         A: 可以通过一些性能监测分析工具,如 JProfiler、Optimizeit Profiler。

     

    4. Q: 如何避免内存泄露、溢出?
        
    A: 1) 尽早释放无用对象的引用。

              好的办法是使用临时变量的时候,让引用变量在退出活动域后自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露。

              2) 程序进行字符串处理时,尽量避免使用String,而应使用StringBuffer。

              因为每一个String对象都会独立占用内存一块区域,如:

     

    Java代码

    1. String str = "aaa";    
    2. String str2 = "bbb";    
    3. String str3 = str   str2;    
    4. // 假如执行此次之后str , str2再不被调用,那么它们就会在内存中等待GC回收;    
    5. // 假如程序中存在过多的类似情况就会出现内存错误;   

    String str = "aaa";String str2 = "bbb"; String str3 = str str2; // 假如执行此次之后str , str2再不被调用,那么它们就会在内存中等待GC回收; // 假如程序中存在过多的类似情况就会出现内存错误;

     

     

             3) 尽量少用静态变量。

             因为静态变量是全局的,GC不会回收。

             4) 避免集中创建对象尤其是大对象,如果可以的话尽量使用流操作。

             JVM会突然需要大量内存,这时会触发GC优化系统内存环境; 一个案例如下: 

     

    Java代码

    1. // 使用jspsmartUpload作文件上传,运行过程中经常出现java.outofMemoryError的错误,    
    2. // 检查之后发现问题:组件里的代码    
    3. m_totalBytes = m_request.getContentLength();    
    4. m_binArray = new byte[m_totalBytes];    
    5. // totalBytes这个变量得到的数极大,导致该数组分配了很多内存空间,而且该数组不能及时释放。    
    6. // 解决办法只能换一种更合适的办法,至少是不会引发outofMemoryError的方式解决。    
    7. // 参考:http://bbs.xml.org.cn/blog/more.asp?name=hongrui&id=3747   

    // 使用jspsmartUpload作文件上传,运行过程中经常出现java.outofMemoryError的错误, // 检查之后发现问题:组件里的代码 m_totalBytes = m_request.getContentLength(); m_binArray = newbyte[m_totalBytes]; // totalBytes这个变量得到的数极大,导致该数组分配了很多内存空间,而且该数组不能及时释放。 // 解决办法只能换一种更合适的办法,至少是不会引发outofMemoryError的方式解决。 // 参考:http://bbs.xml.org.cn/blog/more.asp?name=hongrui&id=3747

       

     

            5) 尽量运用对象池技术以提高系统性能。

             生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。

             6) 不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。

             可以适当的使用hashtable,vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次new之后又丢弃。

             7) 优化配置。

     

     

     

     

    5. Q: 内存溢出的解决方案? 
        
    A: 一是从代码层面进行优化完善,尽量避免该情况发生;

             二是调整优化服务器配置: 

             1) 设置-Xms、-Xmx相等;

             2) 设置NewSize、MaxNewSize相等;

             3) 设置Heap size, PermGen space:

                Tomcat 的配置示例:修改%TOMCAT_HOME%/bin/catalina.bat or catalina.sh

                 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:

                

    Cmd代码

    1. set JAVA_OPTS=-Xms800m -Xmx800m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m  

    -----------------------------/

    内存泄露与溢出区别,何时产生内存泄露?

    文章分类:Java编程

    内存溢出是由于jvm虚拟内存不够!
    而泄漏则是另种概念!1

    下面实在摘抄的内容!!

    下面,我们就可以描述什么是内存泄漏。在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。

    在C++中,内存泄漏的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC,这些内存将永远收不回来。在Java中,这些不可达的对象都由GC负责回收,因此程序员不需要考虑这部分的内存泄露。

    通过分析,我们得知,对于C++,程序员需要自己管理边和顶点,而对于Java程序员只需要管理边就可以了(不需要管理顶点的释放)。通过这种方式,Java提高了编程的效率。


    因此,通过以上分析,我们知道在Java中也有内存泄漏,但范围比C++要小一些。因为Java从语言上保证,任何对象都是可达的,所有的不可达对象都由GC管理。

    对于程序员来说,GC基本是透明的,不可见的。虽然,我们只有几个函数可以访问GC,例如运行GC的函数System.gc(),但是根据Java语言规范定义, 该函数不保证JVM的垃圾收集器一定会执行。因为,不同的JVM实现者可能使用不同的算法管理GC。通常,GC的线程的优先级别较低。JVM调用GC的策略也有很多种,有的是内存使用到达一定程度时,GC才开始工作,也有定时执行的,有的是平缓执行GC,有的是中断式执行GC。但通常来说,我们不需要关心这些。除非在一些特定的场合,GC的执行影响应用程序的性能,例如对于基于Web的实时系统,如网络游戏等,用户不希望GC突然中断应用程序执行而进行垃圾回收,那么我们需要调整GC的参数,让GC能够通过平缓的方式释放内存,例如将垃圾回收分解为一系列的小步骤执行,Sun提供的HotSpot JVM就支持这一特性。

    下面给出了一个简单的内存泄露的例子。在这个例子中,我们循环申请Object对象,并将所申请的对象放入一个Vector中,如果我们仅仅释放引用本身,那么Vector仍然引用该对象,所以这个对象对GC来说是不可回收的。因此,如果对象加入到Vector后,还必须从Vector中删除,最简单的方法就是将Vector对象设置为null。

    Java代码  

    1. Vector v=new Vector(10);   
    2. for (int i=1;i<100; i++)   
    3. {   
    4.     Object o=new Object();   
    5.     v.add(o);   
    6.     o=null;    
    7. }   

    Vector v=new Vector(10);

    for (int i=1;i<100; i++)

    {

      Object o=new Object();

      v.add(o);

      o=null; 

    }


    //此时,所有的Object对象都没有被释放,因为变量v引用这些对象

     

     

     

     

    怎样解决内存溢出

     

     一、内存溢出类型

      1、java.lang.OutOfMemoryError:PermGen space

      JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。

      PermGen space的全称是PermanentGeneration space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGenspace错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

      一个最佳的配置例子:(经过本人验证,自从用此配置之后,再未出现过tomcat死掉的情况)

      set JAVA_OPTS=-Xms800m -Xmx800m -XX:PermSize=128M-XX:MaxNewSize=256m -XX:MaxPermSize=256m

      2、java.lang.OutOfMemoryError:Javaheap space

      第一种情况是个补充,主要存在问题就是出现在这个情况中。其默认空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。如果内存剩余不到40%,JVM就会增大堆到Xmx设置的值,内存剩余超过70%,JVM就会减小堆到Xms设置的值。所以服务器的Xmx和Xms设置一般应该设置相同避免每次GC后都要调整虚拟机堆的大小。假设物理内存无限大,那么JVM内存的最大值跟操作系统有关,一般32位机是1.5g到3g之间,而64位的就不会有限制了。

      注意:如果Xms超过了Xmx值,或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。

      垃圾回收GC的角色

      JVM调用GC的频度还是很高的,主要两种情况下进行垃圾回收:

      当应用程序线程空闲;另一个是java内存堆不足时,会不断调用GC,若连续回收都解决不了内存堆不足的问题时,就会报out of memory错误。因为这个异常根据系统运行环境决定,所以无法预期它何时出现。

      根据GC的机制,程序的运行会引起系统运行环境的变化,增加GC的触发机会。

      为了避免这些问题,程序的设计和编写就应避免垃圾对象的内存占用和GC的开销。显示调用System.GC()只能建议JVM需要在内存中对垃圾对象进行回收,但不是必须马上回收,

      一个是并不能解决内存资源耗空的局面,另外也会增加GC的消耗。

      二、JVM内存区域组成

      简单的说java中的堆和栈

      java把内存分两种:一种是栈内存,另一种是堆内存

      1。在函数中定义的基本类型变量和对象的引用变量都在函数的栈内存中分配;

      2。堆内存用来存放由new创建的对象和数组

      在函数(代码块)中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的内存空间;在堆中分配的内存由java虚拟机的自动垃圾回收器来管理

      堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的。缺点就是要在运行时动态分配内存,存取速度较慢;

      栈的优势是存取速度比堆要快,缺点是存在栈中的数据大小与生存期必须是确定的无灵活性。

      java堆分为三个区:New、Old和Permanent

      GC有两个线程:

      新创建的对象被分配到New区,当该区被填满时会被GC辅助线程移到Old区,当Old区也填满了会触发GC主线程遍历堆内存里的所有对象。Old区的大小等于Xmx减去-Xmn

      java栈存放

      栈调整:参数有+UseDefaultStackSize -Xss256K,表示每个线程可申请256k的栈空间

      每个线程都有他自己的Stack

      三、JVM如何设置虚拟内存

      提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。

      提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

      提示:JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。

      默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。

      提示:假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。

      简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,

      这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了

      提示:注意:如果Xms超过了Xmx值,或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。

      提示:设置NewSize、MaxNewSize相等,"new"的大小最好不要大于"old"的一半,原因是old区如果不够大会频繁的触发"主" GC ,大大降低了性能

      JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;

      由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

      解决方法:手动设置Heap size

      修改TOMCAT_HOME/bin/catalina.bat

      在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:

      JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"

      四、性能检查工具使用

      定位内存泄漏:

      JProfiler工具主要用于检查和跟踪系统(限于Java开发的)的性能。JProfiler可以通过时时的监控系统的内存使用情况,随时监视垃圾回收,线程运行状况等手段,从而很好的监视JVM运行情况及其性能。

      1. 应用服务器内存长期不合理占用,内存经常处于高位占用,很难回收到低位;

      2. 应用服务器极为不稳定,几乎每两天重新启动一次,有时甚至每天重新启动一次;

      3. 应用服务器经常做Full GC(GarbageCollection),而且时间很长,大约需要30-40秒,应用服务器在做Full GC的时候是不响应客户的交易请求的,非常影响系统性能。

      因为开发环境和产品环境会有不同,导致该问题发生有时会在产品环境中发生,通常可以使用工具跟踪系统的内存使用情况,在有些个别情况下或许某个时刻确实是使用了大量内存导致out of memory,这时应继续跟踪看接下来是否会有下降,

      如果一直居高不下这肯定就因为程序的原因导致内存泄漏。

      五、不健壮代码的特征及解决办法

      1、尽早释放无用对象的引用。好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露。

      对于仍然有指针指向的实例,jvm就不会回收该资源,因为垃圾回收会将值为null的对象作为垃圾,提高GC回收机制效率;

      2、我们的程序里不可避免大量使用字符串处理,避免使用String,应大量使用StringBuffer,每一个String对象都得独立占用内存一块区域;

      String str = "aaa";

      String str2 = "bbb";

      String str3 = str + str2;//假如执行此次之后str ,str2以后再不被调用,那它就会被放在内存中等待Java的gc去回收,程序内过多的出现这样的情况就会报上面的那个错误,建议在使用字符串时能使用StringBuffer就不要用String,这样可以省不少开销;

      3、尽量少用静态变量,因为静态变量是全局的,GC不会回收的;

      4、避免集中创建对象尤其是大对象,JVM会突然需要大量内存,这时必然会触发GC优化系统内存环境;显示的声明数组空间,而且申请数量还极大。

      这是一个案例想定供大家警戒

      使用jspsmartUpload作文件上传,运行过程中经常出现java.outofMemoryError的错误,

      检查之后发现问题:组件里的代码

      m_totalBytes = m_request.getContentLength();

      m_binArray = new byte[m_totalBytes];

      问题原因是totalBytes这个变量得到的数极大,导致该数组分配了很多内存空间,而且该数组不能及时释放。解决办法只能换一种更合适的办法,至少是不会引发outofMemoryError的方式解决。参考:http://bbs.xml.org.cn/blog/more.asp?name=hongrui&id=3747

      5、尽量运用对象池技术以提高系统性能;生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。

      6、不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。可以适当的使用hashtable,vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次new之后又丢弃

      7、一般都是发生在开启大型文件或跟数据库一次拿了太多的数据,造成 Out OfMemory Error 的状况,这时就大概要计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。

    展开全文
  • Java集合分类以及各自特点

    万次阅读 多人点赞 2017-08-01 23:31:52
    Java分类 以及各自的特点,对集合中的自定义类元素排序,比较器 集合分为Map和Collection两大类 常用的就是ArrayList,LinkedList,HashSet,LinkedHashSet,TreeSet,HashMap,LinkedHashMap,TreeMap;
  • C语言程序所占内存分类

    千次阅读 2014-02-22 15:33:54
    由于栈的先进先出特点,所以 栈特别方便用来保存 / 恢复调用现场 。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。 (2) 堆( heap ):一般由 程序员动态分配 (调用 malloc 函数...
  • 凡是对电脑有所了解的朋友都知道内存这玩意,可是,可能有不少朋友对内存的认识仅仅局限在SDRAM和DDR SDRAM这两种类型,...以下就让我们看看内存到底有些什么种类吧! 一、RAM(Random Access Memory,随机存取存
  • 内存分区

    千次阅读 多人点赞 2019-08-07 10:24:39
    内存是存储数据的,不同类型的数据要存储在不同的区域,即分类存放,不同的区域作用和功能也不一样。就像你家里的衣柜一样,也分了不同的区域:如挂西装的区域,放袜子的区域等等,我相信每个人都会把这两个东西...
  • 电脑内存条C14和C16的区别是什么

    万次阅读 2019-09-12 09:47:59
    1、时序不同 也就是响应时间不同,单位为时钟周期。 2、性能不同 其他条件相同的情况下,数字越小性能越好。 3、价格不同 ...其他条件相同的情况下,数字越小...内存时序包含描述同步动态随机存取存储器(SDRAM)...
  • 动态内存特点就是容量大、价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使用。 3.3.3、SDRAM:Synchronous Dynamic 同步动态RAM (需要初始化) 是有一个同步接口的动态随机存取内存(DRAM)。...
  • 这样的话对于大量的小内存分类来说会造成浪费。 系统调用申请内存可能是代价昂贵的。系统调用可能涉及用户态和核心态的转换。 没有管理的内存分配在大量复杂内存的分配释放操作下很容易造成内存碎片。 ...
  • 内存溢出和内存泄漏

    千次阅读 2016-03-23 13:36:49
    1、内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 2、内存泄露 memory leak,是指程序在...
  • 原文链接Android 内存泄漏总结内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却...
  • 内存】ECC内存简介

    千次阅读 2020-07-01 00:23:43
    ECC内存简介。
  • 内存泄漏和内存溢出,解决办法

    千次阅读 2019-07-17 10:58:17
    1. 内存泄漏和内存溢出,解决办法 1.1 内存泄露 指程序中已动态分配的堆内存由于某种原因未释放或无法释放...内存泄漏具有隐蔽性,积累性的特征,比其他内存非法访问错误更难检测。这是因为内存泄漏产生的原因是内存...
  • Android 内存泄漏总结内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用...
  • 内存管理

    万次阅读 2015-03-12 17:09:40
    内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++...
  • 传统分类算法以及流计算分类算法

    千次阅读 2016-11-27 11:18:50
    分类算法作为有监督的数据挖掘,需要通过分析数据流中数据的特征建立模型从而将未知类标签的数据项对应到相应的类别中从而实现分类的目的。K近邻分类算法、决策树分类算法和贝叶斯分类算法都是一些常用的针对静态...
  • 一、应用场景 1、进程间通讯——生产者消费者模式 一个现场负责产生数据,一个现场... 由fork()产生的子进程和父进程不共享内存区,所以父子进程间的通讯也可以共享内存,以POSAX共享内存为例:父进程启动后使用...
  • 内存泄漏和内存溢出的联系与区别

    万次阅读 多人点赞 2018-04-28 11:43:37
    一:内存泄漏(memory leak)1:内存泄漏是指...3:内存泄漏具有隐蔽性,积累性的特征,比其他内存非法访问错误更难检测。这是因为内存泄漏产生的原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷。此外,内存...
  • 日期 内核版本 架构 作者 GitHub ...1 前景回顾1.1 内核映射区尽管vmalloc函数族可用于从高端内存域向内核映射页帧(这些在内核空间中通常是无法直接看到的), 但这并不是这些函数的实际用途.重要
  • 一文详解堆栈(二)——内存堆与内存

    千次阅读 多人点赞 2019-10-15 19:06:15
    前言:我们经常听见一个概念,堆(heap)和栈(stack),其实在数据结构中也有同样的这两个概念,但是这和内存的堆栈是不一样的东西...1.1 内存分类标准——五分类 在C++中,内存分成5个区,他们分别是堆,栈,自...
  • 本文结合流量的动态特征和入侵检测系统规则库的静态特征生成高性能报文分类树,提出了一个新的面向骨干网高速入侵检测的报文分类算法FlowCopy Search(FCS).改进在于:①从流量的新角度提出了最优分类树定义并引入分类...
  • 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对 C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++...
  • 堆栈内存释放

    千次阅读 2019-05-29 20:12:35
    文章目录js引擎中内存分类js中堆栈内存的创建和释放栈内存不销毁的特属情况let和count js引擎中内存分类内存:堆内存是用来储存数据类型的 栈内存:栈内存提供js代码执行的环境,并储存引用数据类型的数据的 ...
  • 传统三维模型分类方法因依赖文物碎片的整体形状特征,用于对破损严重、细节缺失、形状不规则的文物碎片分类时,时效差、成本高、准确率低。而文物碎片特征点周围的局部曲面深度信息与表面的规律性几何纹理可作为分类的...
  • 针对随机森林(RF)在高维空间特征选择过程中计算繁琐和内存开销大、分类准确率低等问题, 提出了基于二分搜索(BS)结合修剪随机森林(RFP)的特征选择算法(BSRFP); 该算法首先根据纯度基尼指数获取特征重要性评分, 删除...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 166,454
精华内容 66,581
关键字:

内存的分类以及特点是什么