内存条的性能参数

内存条的性能参数
内存条的性能参数

内存条的性能参数

正因为内存条的性能直接关系着能否充分发挥电脑数据高速处理能力,以及电脑运行的稳定性和可靠性,所以选择内存条时一定要注意。选择内存条应主要考虑其引脚数、容量,奇偶性、速度、品牌等几项性能指标。

1.引脚数目

内存乘机的引脚数目必须与主机板上的SIMM插口的数目相匹配。SIMM的插口有30线,72线和168线三种,所以相应的内存条也有30线,72线和168线三种。应注意,在72线系统中,有奇偶校验使用的36位内存条,无奇偶校验则使用32线内存条。在30线的系统中,有奇偶校验的则使用9位的内存条,无奇偶校验的使用8位的内存条。

2. 容量:

30线的内存条在容量大小上一般有三种:256KB、1MB、4MB;72线的内存条现有五种容量规格:1MB、4MB、8MB、16MB、32MB,其中8MB和32MB为双面内存条。对于30线内存条,由于它们的数据是8位/条,而奔腾机具有64位数据线,因此若用30线内存条,每次至少要用两个BANK即8条,不但滥占插槽,争抢机箱空间,且易发生接触不良和损坏等问题,再加上每条内存最大仅4MB,故586主板不用这种形式,而直接使用72线内存条。72线内存条的数据线为32位,因此在32位的主机板上,可以单独使用。如果用于586电脑,每次用两个完全一样的SIMM组成一个BANK即可。

3.存取速度

内存条的一个重要性能是存取速度,用ns(纳秒)表示,说明系统在内存无错误的情况下作出反应的时间,常见有60ns、70ns、80ns、120ns几种,在内存条上标有-6、-7、-8等字样,该数值越小,说明内存速度越快。内存条的存取速度与主机板速度相匹配时,方能发挥出最大的效率。如果系统要求内存速度为80ns,但使用60ns或70ns的内存条,并没有实际的效益。如果系统要求内存速度为60ns,而使用70ns或80ns的内存条,可千万系统崩溃。不同速度的内存条可混合使用,但以最慢的速度为准。

4.奇偶性

奇偶校验需增加内存芯片、加大成本,选购内存条时常分为2片、3片、真3片、假3片、8片、9片等,这是指内存条是否具有奇偶校验,2片8片内存条不具备奇偶校验,而8片和9片内存条则具备奇偶校验,目前市场上也可见到一引进生产厂商为获取更多的产品利润,将损坏的芯片作为奇偶校验芯片或将部分损坏的芯片拼凑迈出一条完整的内存条,但不

具有奇偶校验功能。所以称之为假3片、假9片。假3片和假9片与2片和8片一样可正常使用。鉴别内存是否具有奇偶校验的方法很简单,当装好内存条开机后,执行BIOS SETUP 程序,选择允许奇偶校验,如微型机能正常引导工作,说明内存具有奇偶校验性,如果显示器屏幕出现奇偶校验错的提示后,出现死机,则内存条不具有奇偶校验性。品质趋于稳定,因此72线SIMM一般不再有奇偶校验位。对于一般用户,奇偶校验没有实际意义,是否带有奇偶校验功能不是区分内存条质量优劣的标准。

第十一讲存储器管理之连续分配方式

第十一讲存储器管理之连续分配方式 所谓连续分配方式:是指为一个用户程序分配一个连续的内存空间。 又可把连续分配方式分为:单一连续分配,固定分区分配,动态分区分配,动态重定位分区分配,四种方式。 1 单一连续分配(单独分区分配) 最简单的一种存储管理方式,但只能用于单用户、单任务的OS中。 概念:单一连续分配就是整个主存区域的用户空间均归一个用户作业使用。 存储管理方法:将内存分为系统区(内存低端,分配给OS用)和用户区(内存高端,分配给用户用)。其中用户区是指除了系统区外的内存空间,提供给用户程序使用。采用静态分配方式,即作业一旦进入内存,就要等待它运行结束后才能释放内存。 主要特点:管理简单,只需小量的软件和硬件支持,便于用户了解和使用。但因内存中只装入一道作业运行,内存空间浪费大,各类资源的利用率也不高。 例子:一个容量为256KB的内存,操作系统占用32KB,剩下224KB全部分配给用户作业,如果一个作业仅需64KB,那么就有160KB的存储空间被浪费。 2 固定分区分配 分区分配方式是满足多道程序设计需要的一种最简单的存储管理方法。 2.1 思想:将内存分成若干个分区(大小相等/不相等),除OS占一区外,其余的每一个分区容纳一个用户程序。这样来实现多道并发。 2.2 分区划分方法:分区大小相等,分区大小不等。但事先必须确定,在运行时不能改变。即分区大小及边界在运行时不能改变。 2.3 内存分配: 首先:要先建立一张分区说明表或使用表,以记录分区号、分区大小、分区的起始地址及状态(已分配或未分配)。 其次:当某个用户程序要装入内存时,由内存分配程序检索分区说明表,从表中找出一个满足要求的尚未分配的分区分配该程序,同时修改说明表中相应分区的状态;若找不到大小足够的分区,则拒绝为该程序分配内存。 第三:当程序执行完毕,释放占用的分区,管理程序将修改说明表中相应分区的状态为未分配,实现内存资源的回收。 2.4 特点 主要特点:管理简单,但因作业的大小并不一定与某个分区大小相等,从而使一部分存储空间被浪费。所以主存的利用率不高 3 动态分区分配 3.1 基本思想:根据进程的实际需要,动态的为其分配内存空间。因此分区大小是动态可变的,分区的个数也是可变的。 3.2 主要特点 管理简单,只需小量的软件和硬件支持,便于用户了解和使用。进程的大小与某个分区大小相等,从而主存的利用率有所提高。 3.3 分区分配的数据结构 为描述空闲分区合已分配的分区,引入如下数据结构。 3.3.1空闲分区表 用于记录每个空闲分区的情况。每个空闲分区占一个表目,表目重含有分区序号,分区起始地址,分区大小等数据项。如下图

RAM内存分为哪些种类

RAM内存分为哪些种类 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%左右。它一般应用于中档以下

深入理解C语言变量和内存

深入理解C语言变量和内存 1、基本数据类型变量名和内存的关系: int i; scanf_s("%d", &i); int i;,在这一句就为i分配了内存(但尚未对这块内存进行初始化),所以可以通过&i直接使用这块内存。赋值就更不用说啦,i = 3;。 变量名i,是为方便编程人员使用,是这块内存的别名,指代到块内存,对编程人员i代表这块内存中存储的值(实际上是i指到这个内存,然后取值)。通常我们都是通过变量名来使用已知的内存的。 i代表取(这块内存中存储的)值,而&i代表取(这块内存的)址。程序本身是不为i这个变量名分配空间的。在最终的机器代码中,是不会出现变量名的,这一点在分析反汇编语言时可以看出(命令:dumpbin /disasm xx.obj >xx_disasm.asm 可以查看反汇编语言)。那么编译器是如何处理变量名的呢,变量名会存储在符号表中,并将符号表中的索引对应到实际物理空间(地址)上去,当调用这个变量时,查找符号表就可以找到对应的地址并取值了。 2、不同类型变量的变量名和内存间的关系: 上面分析的是基本数据类型(如int、char等)的变量名。C中除了变量名之外,还有函数名、常量名、指针名、数组名、结构名等。和变量名不同,这些标识符都是直接对应着地址的。基本数据类型的变量,和地址的对应关系需要取址符&才能得到地址,而其余的这些,名字本身就对应着地址。 例如char *pc = “se”;,就是将字符串常量”se”的首地址(位于常量存储区)赋值给了字符指针pc。这也就解释了为什么不需要为pc分配地址就可以为其赋值,而不会遇到类似下面代码所带来的野指针问题: int *pi; *pi = 1; int *pi句,是为pi分配空间,而不是开辟pi所指向的空间。 2.1 C语言中的常量: C对常量是怎么处理的呢?比如上面的i = 3;中的常量3,存储常量3的地址并不是随机分配的,是在程序中的数据段中(.data?这个我也还不是很确定,希望知道的前辈们给个指导),也就是程序本身并不为3分配内存,而是直接写入指令。3是数字常量,对于字符常量和字符串常量,又分别是怎么处理的呢? 字符常量和数字常量是一样的处理方式,都是类似汇编中的立即数,直接写入指令;

操作系统课程设计--连续动态分区内存管理模拟实现

(操作系统课程设计) 连续动态分区内存 管理模拟实现

目录 《操作系统》课程设计 (1) 引言 (3) 课程设计目的和内容 (3) 需求分析 (3) 概要设计 (3) 开发环境 (4) 系统分析设计 (4) 有关了解内存管理的相关理论 (4) 内存管理概念 (4) 内存管理的必要性 (4) 内存的物理组织 (4) 什么是虚拟内存 (5) 连续动态分区内存管理方式 (5) 单一连续分配(单个分区) (5) 固定分区存储管理 (5) 可变分区存储管理(动态分区) (5) 可重定位分区存储管理 (5) 问题描述和分析 (6) 程序流程图 (6) 数据结构体分析 (8) 主要程序代码分析 (9) 分析并实现四种内存分配算法 (11) 最先适应算 (11) 下次适应分配算法 (13) 最优适应算法 (16)

最坏适应算法......................................................... (18) 回收内存算法 (20) 调试与操作说明 (22) 初始界面 (22) 模拟内存分配 (23) 已分配分区说明表面 (24) 空闲区说明表界面 (24) 回收内存界面 (25) 重新申请内存界面..........................................................26. 总结与体会 (28) 参考文献 (28) 引言 操作系统是最重要的系统软件,同时也是最活跃的学科之一。我们通过操作系统可以理解计算机系统的资源如何组织,操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机系统打交道。 存储器是计算机系统的重要组成部分,近年来,存储器容量虽然一直在不断扩大,但仍不能满足现代软件发展的需要,因此,存储器仍然是一种宝贵而又紧俏的资源。如何对它加以有效的管理,不仅直接影响到存储器的利用率,而且还对系统性能有重大影响。而动态分区分配属于连续分配的一种方式,它至今仍在内存分配方式中占有一席之地。 课程设计目的和内容: 理解内存管理的相关理论,掌握连续动态分区内存管理的理论;通过对实际问题的编程实现,获得实际应用和编程能力。

Java内存区域划分、内存分配原理

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 Java 内存区域划分、内存分配原理 2014/11/16 2448 运行时数据区域 Java 虚拟机在执行Java 的过程中会把管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程 的启动而存在,而有的区域则依赖线程的启动和结束而创建和销毁。 Java 虚拟机包括下面几个运行时数据区域: 程序计数器 程序计数器是一块较小的区域,它的作用可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的模型里,字节码指示器就是通过改变程序计数器的值 来指定下一条需要执行的指令。分支,循环等基础功能就是依赖程序计数器来完成的。 由于java 虚拟机的多线程是通过轮流切换并分配处理器执行时间来完成,一个处理器同一时间只会执行一条线程中的指令。为了线程恢复后能够恢复正确的 执行位置,每条线程都需要一个独立的程序计数器,以确保线程之间互不影响。因 此程序计数器是“线程私有”的内存。 如果虚拟机正在执行的是一个Java 方法,则计数器指定的是字节码指令对应的地址,如果正在执行的是一个本地方法,则计数器指定问空undefined。程序计数器区域是Java 虚拟机中唯一没有定义OutOfMemory 异常的区域。 Java 虚拟机栈 和程序计数器一样也是线程私有的,生命周期与线程相同。虚拟机栈描述的是Java 方法执行的内存模型:每个方法被执行的时候都会创建一个栈帧用于存储局部变量表,操作栈,动态链接,方法出口等信息。每一个方法被调用的过程就对应 一个栈帧在虚拟机栈中从入栈到出栈的过程。

各种内存概念

各种内存概念 这里需要明确的是,我们讨论的不同内存的概念是建立在寻址空间上的。 IBM推出的第一台PC机采用的CPU是8088芯片,它只有20根地址线,也就是说,它的地址空间是1MB。 PC机的设计师将1MB中的低端640KB用作RAM,供DOS及应用程序使用,高端的384KB则保留给ROM、视频适配卡等系统使用。从此,这个界限便被确定了下来并且沿用至今。低端的640KB就被称为常规内存即PC机的基本RAM区。保留内存中的低128KB是显示缓冲区,高64KB是系统BIOS(基本输入/输出系统)空间,其余192KB空间留用。从对应的物理存储器来看,基本内存区只使用了512KB芯片,占用0000至80000这512KB 地址。显示内存区虽有128KB空间,但对单色显示器(MDA卡)只需4KB就足够了,因此只安装4KB的物理存储器芯片,占用了B0000至B10000这4KB的空间,如果使用彩色显示器(CGA卡)需要安装16KB的物理存储器,占用B8000至BC000这16KB的空间,可见实际使用的地址范围都小于允许使用的地址空间。 在当时(1980年末至1981年初)这么“大”容量的内存对PC机使用者来说似乎已经足够了,但是随着程序的不断增大,图象和声音的不断丰富,以及能访问更大内存空间的新型CPU相继出现,最初的PC机和MS-DOS设计的局限性变得越来越明显。 ●1.什么是扩充内存? 到1984年,即286被普遍接受不久,人们越来越认识到640KB的限制已成为大型程序的障碍,这时,Intel和Lotus,这两家硬、软件的杰出代表,联手制定了一个由硬件和软件相结合的方案,此方法使所有PC机存取640KB以上RAM成为可能。而Microsoft刚推出Windows不久,对内存空间的要求也很高,因此它也及时加入了该行列。 在1985年初,Lotus、Intel和Microsoft三家共同定义了LIM-EMS,即扩充内存规范,通常称EMS为扩充内存。当时,EMS需要一个安装在I/O槽口的内存扩充卡和一个称为EMS的扩充内存管理程序方可使用。但是I/O插槽的地址线只有24位(ISA总线),这对于386以上档次的32位机是不能适应的。所以,现在已很少使用内存扩充卡。现在微机中的扩充内存通常是用软件如DOS中的EMM386把扩展内存模拟或扩充内存来使用。所以,扩充内存和扩展内存的区别并不在于其物理存储器的位置,而在于使用什么方法来读写它。下面将作进一步介绍。 前面已经说过扩充存储器也可以由扩展存储器模拟转换而成。EMS的原理和XMS不同,它采用了页帧方式。页帧是在1MB空间中指定一块64KB空间(通常在保留内存区内,但其物理存储器来自扩展存储器),分为4页,每页16KB。EMS存储器也按16KB分页,每次可交换4页内容,以此方式可访问全部EMS存储器。符合EMS的驱动程序很多,常用的有EMM386.EXE、QEMM、TurboEMS、386MAX等。DOS和Windows中都提供了EMM386.EXE。 ●2.什么是扩展内存? 我们知道,286有24位地址线,它可寻址16MB的地址空间,而386有32位地址线,它可寻址高达4GB的地址空间,为了区别起见,我们把1MB以上的地址空间称为扩展内存XMS(eXtend memory)。 在386以上档次的微机中,有两种存储器工作方式,一种称为实地址方式或实方式,

内存条的种类

内存条的种类 老的内存有FPM、EDO、SDRM,后来的有DDR、DDR2、DDR3、RDRAM 目前能见到的内存有:SDR、DDR、DDR2 ,DDR3三类。比如说DDR 800后面所带的数字表示内存的频率,数字越高速度越快。 内存的价格非常不稳定,没办法讨论其性价比。 性能从低到高分别是:SDR DDR DDR2 DDR3 外观: SDR一般有两个缺口 DDR1的缺口比较靠外 DDR2的缺口比较靠中间 DDR2代和DDR3代的槽是一样的 其中DDR与DDR2的区别很不明显,DDR是184线接口,DDR2是240线接口,金手指比DDR的要密看标识,上面写的很清,下面用图片来直观的说一下其中的区别吧 延迟问题

在同等核心频率下,DDR2的实际工作频率是DDR的两倍。这得益于DDR2内存拥有两倍于标准DDR内存的4BIT预读取能力。换句话说,虽然DDR2和DDR一样,都采用了在时钟的上升延和下降延同时进行数据传输的基本方式,但DDR2拥有两倍于DDR的预读取系统命令数据的能力。也就是说,在同样100MHz的工作频率下,DDR的实际频率为200MHz,而DDR2则可以达到400MHz。 这样也就出现了另一个问题:在同等工作频率的DDR和DDR2内存中,后者的内存延时要慢于前者。举例来说,DDR 200和DDR2-400具有相同的延迟,而后者具有高一倍的带宽。实际上,DDR2-400和DDR 400具有相同的带宽,它们都是3.2GB/s,但是DDR400的核心工作频率是200MHz,而DDR2-400的核心工作频率是100MHz,也就是说DDR2-400的延迟要高于DDR400。 封装和发热量: DDR2内存技术最大的突破点其实不在于用户们所认为的两倍于DDR的传输能力,而是在采用更低发热量、更低功耗的情况下,DDR2可以获得更快的频率提升,突破标准DDR的400MHZ限制。 DDR内存通常采用TSOP芯片封装形式,这种封装形式可以很好的工作在200MHz上,当频率更高时,它过长的管脚就会产生很高的阻抗和寄生电容,这会影响它的稳定性和频率提升的难度。这也就是DDR的核心频率很难突破275MHZ的原因。而DDR2内存均采用FBGA封装形式。不同于目前广泛应用的TSOP封装形式,FBGA封装提供了更好的电气性能与散热性,为DDR2内存的稳定工作与未来频率的发展提供了良好的保障。 DDR2内存采用1.8V电压,相对于DDR标准的2.5V,降低了不少,从而提供了明显的更小的功耗与更小的发热量,这一点的变化是意义重大的。 DDR2采用的新技术: 除了以上所说的区别外,DDR2还引入了三项新的技术,它们是OCD、ODT和Post CAS。 OCD(Off-Chip Driver):也就是所谓的离线驱动调整,DDR II通过OCD可以提高信号的完整性。DDR II通过调整上拉(pull-up)/下拉(pull-down)的电阻值使两者电压相等。使用OCD通过减少DQ-DQS的倾斜来提高信号的完整性;通过控制电压来提高信号品质。 ODT:ODT是内建核心的终结电阻器。我们知道使用DDR SDRAM的主板上面为了防止数据线终端反射信号需要大量的终结电阻。它大大增加了主板的制造成本。实际上,不同的内存模组对终结电路的要求是不一样的,终结电阻的大小决定了数据线的信号比和反射率,终结电阻小则数据线信号反射低但是信噪比也较低;终结电阻高,则数据线的信噪比高,但是信号反射也会增加。因此主板上的终结电阻并不能非常好的匹配内存模组,还会在一定程度上影响信号品质。DDR2可以根据自已的特点内建合适的终结电阻,这样可以保证最佳的信号波形。使用DDR2不但可以降低主板成本,还得到了最佳的信号品质,这是DDR不能比拟的。

内存种类与特点

1、FPM内存 FPM是Fast Page Mode(快页模式)的简称,是较早的PC机普遍使用的内存,它每隔3个时钟脉冲周期传送一次数据。现在早就被淘汰掉了。 2、EDO内存 EDO是Extended Data Out(扩展数据输出)的简称,它取消了主板与内存两个存储周期之间的时间间隔,每隔2个时钟脉冲周期传输一次数据,大大地缩短了存取时间,使存取速度提高30%,达到60ns。EDO内存主要用于72线的SIMM内存条,以及采用EDO内存芯片的PCI显示卡。这种内存流行在486以及早期的奔腾计算机系统中,它有72线和168线之分,采用5V工作电压,带宽32 bit,必须两条或四条成对使用,可用于英特尔430FX/430VX甚至430TX芯片组主板上。目前也已经被淘汰,只能在某些老爷机上见到。 3、SDRAM内存 SDRAM是Synchronous Dynamic Random Access Memory(同步动态随机存储器)的简称,是前几年普遍使用的内存形式。SDRAM采用3.3v工作电压,带宽64位,SDRAM将CPU与RAM通过一个相同的时钟锁在一起,使RAM和CPU能够共享一个时钟周期,以相同的速度同步工作,与EDO内存相比速度能提高50%。SDRAM基于双存储体结构,内含两个交错的存储阵列,当CPU从一个存储体或阵列访问数据时,另一个就已为读写数据做好了准备,通过这两个存储阵列的紧密切换,读取效率就能得到成倍的提高。SDRAM不仅可用作主存,在显示卡上的显存方面也有广泛应用。SDRAM曾经是长时间使用的主流内存,从430TX芯片组到845芯片组都支持SDRAM。但随着DDR SDRAM的普及,SDRAM 也正在慢慢退出主流市场。 4、RDRAM内存 RDRAM是Rambus Dynamic Random Access Memory(存储器总线式动态随机存储器)的简称,是Rambus公司开发的具有系统带宽、芯片到芯片接口设计的内存,它能在很高的频率范围下通过一个简单的总线传输数据,同时使用低电压信号,在高速同步时钟脉冲的两边沿传输数据。最开始支持RDRAM 的是英特尔820芯片组,后来又有840,850芯片组等等。RDRAM最初得到了英特尔的大力支持,但由于其高昂的价格以及Rambus公司的专利许可限制,一直未能成为市场主流,其地位被相对廉价而性能同样出色的DDR SDRAM迅速取代,市场份额很小。 5、DDR SDRAM内存 DDR SDRAM是Double Data Rate Synchronous Dynamic Random Access Memory(双数据率同步动态随机存储器)的简称,是由VIA等公司为了与RDRAM相抗衡而提出的内存标准。DDR

4.实例变量和类变量内存分配

实例变量和类变量内存分配 Java向程序员许下一个承诺:无需关心内存回收,java提供了优秀的垃圾回收机制来回收已经分配的内存。大部分开发者肆无忌惮的挥霍着java程序的内存分配,从而造成java程序的运行效率低下! java内存管理分为两方面: 1,内存的分配:指创建java对象时,jvm为该对象在堆内存中所分配的内存空间。 2,内存的回收:指当该java对象失去引用,变成垃圾时,jvm的垃圾回收机制自动清理该对象,并回收该对象占用的内存。 jvm的垃圾回收机制由一条后台线程完成。不断分配内存使得系统中内存减少,从而降低程序运行性能。大量分配内存的回收使得垃圾回收负担加重,降低程序运行性能。 一,实例变量和类变量(静态变量) java程序的变量大体可分为成员变量和局部变量。 其中局部变量有3类:形参、方法内的局部变量、代码块内的局部变量。 局部变量被存储在方法的栈内存中,生存周期随方法或代码块的结束而消亡。 在类内定义的变量被称为成员变量。没使用static修饰的称为成员变量,用static修饰的称为静态变量或类变量。 1.1实例变量和类变量的属性 在同一个jvm中,每个类只对应一个Class对象,但每个类可以创建多个java对象。 【其实类也是一个对象,所有类都是Class实例,每个类初始化后,系统都会为该类创建一个对应的Class实例,程序可以通过反射来获取某个类所对应的Class实例(Person.class 或Class.forName(“Person”))】 因此同一个jvm中的一个类的类变量只需要一块内存空间;但对实例变量而言,该类每创建一次实例,就需要为该实例变量分配一块内存空间。 非静态函数需要通过对象调用,静态函数既可以通过类名调用,也可以通过对象调用,其实用对象调用静态函数,底层还是用类名调用来实现的! 1.2实例变量的初始化时机 对实例变量而言,它属于java对象本身,每次创建java对象时都需要为实例变量分配内存空间,并执行初始化。

内存中的各区域的分配

程序中用来存放数据的内存分为四块,其实另有一块用于存放代码,这里我们不讨论,这四块分别是: 1、全局区(静态区)(static):全局变量和静态变量都存储在这块区域,与其他变量的明显区别就是生命周期不同,在程序结束时,系统会释放这块资源 2、文字常量区:常量字符串就是放在这块区域,即是我们常说起的常量池。这块也是在程序结束时由系统释放。 3、栈区(stack):存放函数的参数值,局部变量的值等。这块的数据大家就很熟悉了,在进入作用域时分配占用内存,离开作用域时释放占用内存 4、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由系统回收。由于这个原因,在C和C++中就有能产生大量程序员分配但忘记释放的堆区内存,造成可使用内存越来越少,这个被称之为内存泄露。而在java中,因为有了垃圾收集机制,这样的内存会被自动处理掉,所以在java中,反倒不需要程序员去释放内存了。 那么栈和堆的区别到底在哪里呢? 1、内存分配方面: 堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。 栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、申请方式方面: 堆:需要程序员自己申请,并指明大小。在c中malloc函数如p1 = (char *)malloc(10);在C++,java中用new运算符,但是注意p1、p2本身是在栈中的。因为他们还是可以认为是局部变量。 栈:由系统自动分配。例如,声明在函数中一个局部变量int b;系统自动在栈中为b 开辟空间。 3、系统响应方面: 堆:操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样代码中的delete语句才能正确的释放本内存空间。另外由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。 栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。 4、大小限制方面: 堆:是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。 栈:在Windows下, 栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是固定的(是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。 5、效率方面: 堆:是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方

如何判断内存条类型

如何判断内存条类型 A部分标明的是生产此颗粒企业的名称——Hynix。B部分标明的是该内存模组的生产日期,以三个阿拉伯数字的形式表现。第一个阿拉伯数字表示生产的年份,后面两位数字表明是在该年的第XX周生产出来的。如上图中的517表示该模组是在05年的第17周生产的。 C部分表示该内存颗粒的频率、延迟参数。由1-3位字母和数字共同组成。其根据频率、延迟参数不同,分别可以用“D5、D43、D4、J、M、K、H、L”8个字母/数字组合来表示。其含义分别为D5代表DDR500(250MHz),延迟为3-4-4;D43代表DDR433(216MHz),延迟为3-3-3;D4代表DDR400(200MHz),延迟为3-4-4;J代表DDR333(166MHz),延迟为2.5-3-3;M代表DDR266(133MHz),延迟为2-2-2;K代表DDR266A(133MHz),延迟为2-3-3;H代表DDR266B (133MHz),延迟为2.5-3-3;L代表DDR200(100MHz),延迟为2-2-2。 D部分编号实际上是由12个小部分组成,分别表示内存模组的容量、颗粒的位宽、工作电压等信息。具体详细内容如图二所示。 D部分编号12个小部分分解示意图 采用现代颗粒的内存颗粒特写 第1部分代表该颗粒的生产企业。“HY”是HYNIX的简称,代表着该颗粒是现代生

产制造。第2部分代表产品家族,由两位数字或字母组成,“5D”表示为DDR内存,“57”表示为SDRAM内存。 第3部分代表工作电压,由一个字母组成。其中含义为V代表VDD=3.3V & VDDQ=2.5V; U代表VDD=2.5V & VDDQ=2.5V;W代表VDD=2.5V & VDDQ=1.8V;S代表VDD=1.8V & VDDQ=1.8V来分别代表不同的工作电压。 第4部分代表内存模组的容量和刷新设置,由两位数字或字母组成。对于DDR内存,分别由“64、66、28、56、57、12、1G”来代表不同的容量和刷新设置。其中含义为:64代表64MB容量,4K刷新;66代表64MB容量,2K刷新; 28代表128MB容量,4K刷新;56代表256MB容量,8K刷新;57代表256MB容量,4K刷新;12代表512MB容量,8K刷新;1G代表1GB容量,8K刷新。 第5部分代表该内存颗粒的位宽,由1个或2个数字组成。分为4种情况,分别用“4、8、16、32”来分别代表4bit、8bit、16bit和32bit。 第6部分表示的是Bank数,由1个数字组成。有三种情况,分别是“1”代表2 bank,“2”代表4 bank,“4”代表8 bank。 第7部分代表接口类型,由一个数字组成。分为三种情况,分别是“1”代表SSTL_3,“2”代表SSTL_2;“3”代表SSTL_18。 第8部分代表该颗粒的版本,由一个字母组成,这部分的字母在26个字母中的位

内存的存储管理--段式和页式管理的区别

存储管理的基本原理 内存管理方法 内存管理主要包括内存分配和回收、地址变换、内存扩充、内存共享和保护等功能。 下面主要介绍连续分配存储管理、覆盖与交换技术以及页式与段式存储管理等基本概念和原理。 1.连续分配存储管理方式 连续分配是指为一个用户程序分配连续的内存空间。连续分配有单一连续存储管理和分区式储管理两种方式。 (1)单一连续存储管理 在这种管理方式中,内存被分为两个区域:系统区和用户区。应用程序装入到用户区,可使用用户区全部空间。其特点是,最简单,适用于单用户、单任务的操作系统。CP/M和DOS 2.0以下就是采用此种方式。这种方式的最大优点就是易于管理。但也存在着一些问题和不足之处,例如对要求内存空间少的程序,造成内存浪费;程序全部装入,使得很少使用的程序部分也占用—定数量的内存。 (2)分区式存储管理 为了支持多道程序系统和分时系统,支持多个程序并发执行,引入了分区式存储管理。分区式存储管理是把内存分为一些大小相等或不等的分区,操作系统占用其中一个分区,其余的分区由应用程序使用,每个应用程序占用一个或几个分区。分区式存储管理虽然可以支持并发,但难以进行内存分区的共享。 分区式存储管理引人了两个新的问题:内碎片和外碎片。前者是占用分区内未被利用的空间,后者是占用分区之间难以利用的空闲分区(通常是小空闲分区)。为实现分区式存储管理,操作系统应维护的数据结构为分区表或分区链表。表中各表项一般包括每个分区的起始地址、大小及状态(是否已分配)。 分区式存储管理常采用的一项技术就是内存紧缩(compaction):将各个占用分区向内存一端移动,然后将各个空闲分区合并成为一个空闲分区。这种技术在提供了某种程度上的灵活性的同时,也存在着一些弊端,例如:对占用分区进行内存数据搬移占用CPU~t寸间;如果对占用分区中的程序进行“浮动”,则其重定位需要硬件支持。 1)固定分区(nxedpartitioning)。 固定式分区的特点是把内存划分为若干个固定大小的连续分区。分区大小可以相等:这种作法只适合于多个相同程序的并发执行(处理多个类型相同的对象)。分区大小也可以不等:有多个小分区、适量的中等分区以及少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。这种技术的优点在于,易于实现,开销小。缺点主要有两个:内碎片造成浪费;分区总数固定,限制了并发执行的程序数目。 2)动态分区(dynamic partitioning)。 动态分区的特点是动态创建分区:在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小。与固定分区相比较其优点是:没有内碎片。但它却引入了另一种碎片——外碎片。动态分区的分区分配就是寻找某个空闲分区,其大小需大于或等于程序

变量名有两个重要属性数据类型和组织结构数据类型指出属于数据

IDL中的变量类型 变量名有两个重要属性:数据类型和组织结构。数据类型指出属于数据类型中的哪一种。在IDL中有14种基本数据类型。在图表1中将看到每一种数据类型,每个类型创建的变量的字节大小,变量创建方式,数据类型之间强制转换的IDL函数名称。除了数据类型外,一个变量有一个组织结构。有效的组织结构有标量(例如单个数值)、矢量(真正的一维数组)、数组(最高可达8维)和IDL结构(能包含各种数据类型的变量和组织结构,结构中独立的组成部分称为字段)。 数据类型字节数创建变量数据类型函数 字节型 1 Var=0B thisVar=Byte(variab le) 16位有符号整 型2 Var=0 thisVar=Fix(variabl e) 32位有符号长 整型4 Var=0L thisVar=Long(variab le) 64位有符号整 型8 Var=0LL thisVar=Long64(vari able) 16位无符号整 型2 Var=0U thisVar=UInt(variab le) 32位无符号长 4 Var=0UL thisVar=ULong(varia

整型ble) 64位无符号整 型8 Var=0ULL thisVar=Ulong64(var iable) 浮点型 4 Var=0.0 thisVar=Float(varia ble) 双精度浮点型8 Var=0.0D thisVar=Double(vari able) 复数8 Var=Complex(0.0 ,0.0) thisVar=Complex(var iable) 双精度复数16 Var=Dcomplex(0. 0D,0.0D) thisVar=DComplex(va riable) 字符串 0-3276 7 Var=’’或Var=”” thisVar=String(vari able) 指针 4 Var=Ptr_New() None 对象 4 Var=Obj_New() None 表1:IDL中的14种基本数据类型。表中显示了每种数据类型的字节数,创建变量的方法,用语数据类型之间强制转换的IDL函数 数据类型初始化函数产生索引值的函数 字节型BytArr BIndGen 16位有符号整型IntArr IndGen

首次适应算法 内存分配

操 作 系 统 实 验 报 告 课程名称:操作系统 实验题目:首次适应算法 姓名: **** 专业班级: *********** 学号: ************* 指导老师: *****

一、实验目的 在计算机系统中,为了提高内存区的利用率,必须给电脑内存区进行合理的分配。本实验通过对内存区分配方法首次适应算法的使用,来了解内存分配的模式。 二、实验要求 1.内存大小初始化 2.可以对内存区进行动态分配,采用首次适应算法来实现 3.可以对已分配的内存块进行回收,并合并相邻的空闲内存块。 三、实验内容 把一个作业装入内存,按照首次适应算法对内存区进行分配,作业结束,回收已分配给该作业的内存块,并合并相邻的空闲内存块。 四、实验结果 运行效果: 1.初始化内存区大小,并添加作业,选择1添加作业 2. 当作业大小超过存储块大小时,分配失败。 3.选择3,可查看内存分配情况 4.选择2回收内存 5.添加新作业 6.回收C作业,相邻的空闲内存块合并。 五、实验总结

首次适应算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始查找,直到找到一个大小能满足要求的空闲分区为止;然后按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲区仍留在空闲链中。若从链首到链尾都不能找到一个能满足要求的分区,则此次分配失败。这里,我采用数组的方式,模拟内存分配首次适应算法,动态的为作业分配内存块。可以根据作业名称回收已分配的内存块,当空闲内存块相邻时,则合并。 通过此次的实验,让我对内存分配中首次适应算法更加熟悉,在此基础上,我也测试最佳适应算法(best_fit)和最坏适应算法(worst_fit),并对其进行了比较分析,从比较中我发现,针对同一个问题,解决的方法不止一种,而且不同的方法所要消耗的资源和时间也不相同,根据不同的要求,方法的优劣也不同,可以说方法是解决问题的一种模式,随环境不同而体现出优越性。 六、实验附录 程序源代码: #include #include #include int neicun=200;//内存块默认大小 int fqNum=1;//已使用分区数目,进程数目=fqNum-1 #define number 100//进程数量 struct fqinfo//分区信息 { int start;//开始位置 int end;//结束位置 char name;//进程名称 int capactity;//进程大小或者分区块大小 int flag;//分区使用标记,0:未使用 1:已使用 2:回收或者合并的分区 3:尾部 }fqlist[number]; int init_neicun();//初始化内存大小 int first_fit(char name,int size);//首次适应算法 int fenpei();//为进程存储区 int showit();//显示进程 int menu();//功能菜单 int Memory_recovery();//内存回收 int exit();//退出系统

内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C ][内存管理]

内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区 [C++][内存管理] 一.在c中分为这几个存储区 1.栈- 由编译器自动分配释放 2.堆- 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放 4.另外还有一个专门放常量的地方。- 程序结束释放 #define不占用内存单元。C++编译器通常并不给const常量分配存储空间,而是把const变量的定义保存在符号表里。在VC中,const变量与一般变量一样,都分配内存空间。 在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。在所有函数体外定义的是全局量,加了static修饰符后不管在哪里都存放在全局区(静态区),在所有函数体外定义的static变量表示在该文件中有效,不能extern到别的文件用,在函数体内定义的static 表示只在该函数体内有效。另外,函数中的"adgfdf"这样的字符串存放在常量区。比如: int a = 0; //全局初始化区 char *p1; //全局未初始化区 void main() { int b; //栈 char s[] = "abc"; //栈 char *p2; //栈 char *p3 = "123456"; //123456{post.content}在常量区,p3在栈上 static int c = 0; //全局(静态)初始化区 p1 = (char *)malloc(10); //分配得来得10字节的区域在堆区 p2 = (char *)malloc(20); //分配得来得20字节的区域在堆区 strcpy(p1, "123456"); //123456{post.content}放在常量区,编译器可能会将它与p3所指向的"123456"优化成一块} 二.在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区

内存名称详解

内存名称详解 PC-66 这种内存使用66MHz的频率,而这也是第一代的SDR SDRAM内存。 PC-100 同样的,这种内存只是将工作频率提升到了100MHz,工作在CAS3模式下。 PC-133 这次改变还是只是将频率提升到133MHz,同样工作在CAS3模式下。 PC-150 这种内存并非官方发布的一个版本,而PC-150实际上就是一个超频版的内存。通常这种内存可以运行在150MHz频率CAS3模式或者是133MHz频率CAS2模式下,但是据说Corsair 的PC-150内存可以在150MHz 的频率下以CAS2的模式工作。 PC-166 另外一类超频内存,只是单纯的超频使得频率达到了一个新高点而已,仍然运行在CAS3之下。 PC-180 可以算作是另类的超频内存了,它简单的将频率提升到了180MHz,但是我个人认为这种内存没有实际使用的意义,因为毕竟现在DDR内存的价格已经是非常便宜了。 DDR SDRAM DDR内存按照速度分类就可以用两种方法来进行分类了。第一种就是以DDRXXX这种方式命名。后边的“XXX”就表示了这个内存是以两倍于XXX的速度运行的内存。另外一种就是以PCXXXX进行命名。后边的“XXXX”就是内存的带宽。 PC1600 此类DDR内存就是最早的一代DDR内存了。它的工作频率为200MH(由于是DDR内存,所以频率增加一倍,就是100MHz x2所以实际上这类内存是工作在200MHz的频率下的),而工作模式为CAS2.5。 DDR266/PC2100 现在最普遍见到的DDR内存,工作频率为266MHz,工作模式为CAS2.5。 PC2400 又是一个非官方版本的DDR内存。实际上就是通过对内存颗粒的筛选、改造而制造成质量上乘的超频DDR内存。这样,让它们可以在150MHz(实际使用中双倍变为300MHz)的频率下工作在CAS2的模式下。Corsair就是其中的一个厂商。 DDR333/PC2700 官方发布的一个DDR内存版本,通过将内存频率增加到166MHz DDR(实际工作中双倍变为333MHz)的CAS2.5模式,来提升系统性能。

Java内存空间划分初识(适合初学者)

Java内存空间划分初识(适合初学者) 前言:在编程中,自己归纳过那些变量会被初始化,可是全靠死记硬背,实际开发中还老犯错。后来在看书中,了解是自己对Java内存空间的认识不足。今天通过看视频,查阅书籍和网上查询,简单归纳了Java内存空间划分,使得自己对Java数据分类和运用有很大的提升。现在分享给大家,希望能有一些帮助和启发。 同其他软件一样,JVM从计算机获取一片内存。 JVM中的内存划分为五个区域,每个区域有着不同的数据处理方式。 分别是: 1、寄存器。--给CPU用的地方,一般Java程序员可不做过多学 习。 2、本地方法区。--与所在系统相关,分不同版本。具体系统可部 分学习。 3、方法区。--后面JAVA应该深入学习部分,初学者可暂时放一 放。 4、栈内存。--(下面详讲。) 5、堆内存。--(下面详讲。) 一、栈内存。

1、存放的是什么? 答:存储的都是局部变量。 (局部变量所属方法也进栈中。局部变量都在方法中,方法不进栈,局部变量就没办法进栈。) 2、变量所属的作用域一旦结束,该变量就自动释放。 (栈内存更新很快,因为变量的生命周期很短。) (局部代码块,限定局部变量的生命周期。) 小结:栈内存更新速率很快。 二、堆内存。 1、存放的什么? 答:存储是数组和对象(其实数组就是对象)。凡是new建立在堆中。 2、堆内存的特点: (1)每一个实体都有首地址值。 (2)堆内存中的每一个变量都有默认初始化值;根据类型的不同而不同。 整数是0,小数是0.0或者0.0f,boolean是false,char 是‘\u000’。 (’\u0000’指Unicode下的空格。) (3)垃圾回收机制。 3、堆特点的附带说明

相关文档
最新文档