修改虚拟机内存 和开启“硬件加速

修改虚拟机内存 和开启“硬件加速
修改虚拟机内存 和开启“硬件加速

昨晚回复了一个帖子,内容比较经典,所以特开一贴,大家可以研究一下!

主要是机子里的关于系统性能的2个参数:

1. debug.sf.hw=0,修改为debug.sf.hw=1,此步骤为打开硬件加速

2. dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m

上面的第二点注意,这是修改虚拟机内存,不是修改虚拟内存!!这2者完全不同!

最近论坛里关于修改安卓系统2个参数的帖子很火,说修改后可以提升手机的性能。修改后有说好用的,也有说不好用的,好用的把楼主捧为了神,不好用的把楼主骂个半死,其实科学嘛,总有好处有坏处的,我们只要好好分析,就能得知我们为什么要改,还有修改后可以得到什么样的益处。捧别人为神或者踩别人为泥都对事情发展没有好处。

关于修改的内容,主要是修改2个参数:

debug.sf.hw=0,修改为debug.sf.hw=1,此步骤为打开硬件加速

dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m

我来跟你解释这2个参数有什么作用,并且说说为什么我做ROM的时候不修改这2个参数。

1. dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m

安卓系统实际上,就是建立在linux内核上的一个JAVA系统,了解JAVA的同学应该知道,在运行JAVA 程序的时候,需要在每个程序上建立一个虚拟机,以获得内存的分配,优点是假设某个程序崩溃了,系统只要关闭那个虚拟机就可以了,不会影响其他程序,缺点是很耗内存,因为你每开一个程序,就要新开一个虚拟机。

举个例子,打开程序A 的时候,程序A 就自动向系统申请1份虚拟机内存,然后不关闭,再开一个程序B ,程序B要求向系统申请3份内存,假设虚拟机内存设置为24M ,那么这2个程序合共占用了内存1X24 + 3X24 = 96M 。假设虚拟机内存设置为32M ,则这2个程序合共占用了内存1X32 + 3X32 =128M

那么,究竟修改好,还是不修改好呢?

假设你的机子里,平常只运行一些小程序,例如QQ、看书软件、小游戏等,那么建议你不要修改,就使用标准的24M,因为足够用,并且防止运行程序过多,而产生崩溃。那是不是越小越好呢?当然不是,因为分配给程序的内存过小,有可能因为软件申请不到足够的内存,而运行不流畅。

假设平常经常运行大型程序,例如大型3D游戏等,则可以稍微调大一些,以使大型程序得到足够的内存来运行,可以更流畅。那是不是越大越好呢,当然不是,因为调的太大,其他程序就分配不到内存,无法

运行了。

google 为什么要把系统的虚拟机设置为24M 呢?由于有些软件吃内存,也有一些小软件不吃内存,我觉得这是属于一个中庸的设计,由于没法全部偏向大型,也没法全部偏向小型,那就中庸吧。

我们都知道,华为C8650的机身内存RAM 是256M ,这是固定的,给一个虚拟机用24M 还是32M ,自己决定吧,不过,对于某些程序控,在手机里装一大堆需要开启服务的软件的筒子们,建议还是别改了,否则开机的时候需要启动一大堆程序,最后弄得机子都开不了。

我们来和常用的windows系统对比一下,假设同样有256M内存

windows系统的内存机制是:来了一个程序,程序告诉系统,我要100M ,然后来了第二个程序,第二个程序说,我要150M,这个时候,内存已经被使用100M + 150M = 250M,剩余6M 。

然后来了第三个程序,第三个程序说,我要50M,由于不够分给他,系统就崩溃了。

安卓系统的内存机制是:来了一个程序,程序告诉系统,我要100M ,然后来了第二个程序,第二个程序说,我要150M,这个时候,内存已经被使用100M + 150M = 250M,剩余6M 。

然后来了第三个程序,第三个程序说,我要50M,这个时候系统自动关闭最先申请内存程序的虚拟机,或者最次要程序的虚拟机,他把第一个程序关闭了,系统获得了100M的内存,加上剩余的6M,合共106M,分配给第三个程序50M,系统继续运行。

第一个是三个和尚,最后大家都没水吃

第二个是牺牲小我,完成大我。

当然,系统在实际运用中,比上面复杂多了,例如安卓还加入了“隐藏机制”,只要不运行的程序,都自动马上释放内存,windows系统出现3个程序抢内存的情况,也加入了“等待机制”等,有兴趣的话可以自己研究。

转载一段hiapk论坛的文章:《安卓的原理...不用在意内存的大小》(以下全部都是转载)

不用在意剩余内存的大小。

其实很多人都是把使用其他系统的习惯带过来来了。android大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系。如果你知道java,就能更清楚这机制了。其实和java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动应用的速度。这本来就是android标榜的优势之一,如果人为去关闭进程,没有太大必要。特别是自动关进程的软件。

到这里有人会说了,那为什么内存少的时候运行大型程序会慢呢?其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。所以,论坛上有个更改内存阀值的程序可以有一定改善。

但改动也可能带来一些问题,取决于值的设定。

那么,进程管理软件有无必要呢?有的。就是在运行大型程序之前,你可以手动关闭一些

进程释放内存,可以显著的提高运行速度。但一些小程序,完全可交由系统自己管理。谈到这里,可能有的朋友会问,如果不关程序是不是会更耗电。我就说说android后台的原理,你就明白了。android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。所以为什么有的程序切出去重进会到主界面。但是,一个程序如果想要在后台处理些东西,如音乐播放,它就会开启一个服务。服务可在后台持续运行,所以在后台耗电的也只有带服务的应用了。这个在进程管理软件里能看到,标签是service。至于广播什么的我就不涉及了。所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源,何必要关掉他们抹杀这个android的优点呢?还有一个。为什么android一个应用看起来那么耗内存。大家知道,android上的应用是java,当然需要虚拟机,而android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。

以上这些设计确保了android的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃,也永远没有内存不足的提示出现。大家可能是被windows毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,很没必要。大家不妨按我说的习惯来用用这个系统。最后推荐一款进程管理软件,systempanel,market上能搜到,界面友好启动快,功能也不错,用于手动关闭进程很好的软件。

祝大家玩机愉快,这系统开十天半个月都没问题,不是windows。

原帖地址:https://www.360docs.net/doc/961443008.html,/wordpress/?p=121

以上内容均为转帖过来,至于为什么开了大程序或者开了好几个程序之后切换会变慢,我的理解如下

1.大程序A已经开启,占用70%内存,如果再想运行一个B,需要50%的内存,则就需要一个将A从内存中释放或者压缩的过程,所以表现出来的就是慢一会儿

2.A\B\C\D\E共占用内存80%,运行新程序Z需要20%的内存,系统内存因为没见过剩余0的时候,也就是应该剩一部分空闲内存,那么就需要从A~E这几个程序中选择一个或者几个来关闭,这一过程也需要耗费系统资源,所以会慢一会儿

3.也就是说你手动去杀程序的时候,就是替系统在释放内存,就算你不杀,在需要内存的时候系统也会自动释放。

4.不在后台运行的程序(没服务的),即使不杀也不会耗电。在后台运行的(有服务的)程序,如后台放歌,当然会耗电。

5.不是说杀进程没用,不然作者就不会推荐进程管理软件了。哪个带服务耗电哪个后台一直在运行,看服务就能看出来,这样的该杀。

6,以qq举例,正常的退,会在进程管理里留下qq的运行状态,但不耗电不占cpu,如果你只是切换出去(按小房子而不是退出)那么自然会耗电,因为程序还在运行。

第二个参数:debug.sf.hw=0,修改为debug.sf.hw=1,此步骤为打开硬件加速

首先,我要说明,这个世界上没有免费的午餐,假设通过那么简单的设置就可以提升性能,那厂商为什么不做呢?由此可知这个玩意实在效用有限,或者是需要和其他工具配合使用!

这个设置的作用到现在为止还没有一个标准的说法来说明这是用来干嘛的,开启硬件加速?开启什么硬件加速?

难道是3D性能?难道不开启就没有3D性能吗?

开启CPU某些特殊性能?这个也不靠谱啊!获取CPU性能关键看指令集!而且,为什么不一开始就使用呢?

开启其他硬件性能?改了难道音箱变大声了?改了难道30W像素的摄像头可以照500W了?改了难道内存由256M变成512M 了?

要么就是让CPU 一直保持100%性能的状态?那样性能是提升了,但是电池效果却下降了!(觉得这个解释还稍微靠谱一些)

我个人认为,这个设置的作用,目的是开启或者结束硬件厂商的优化指令,因为每个厂商对硬件的设置不一样,肯定在某些位置设置了一个优化指令,并且通过这个设置来开启。

例如,google 的工程设计标准里,设计了某个版本的手机设置标准是256M内存,并且告诉所有手机生产厂商:如果你是按照我的标准来制作,那么debug.sf.hw= 就设置为0,如果你要自己更改部分硬件设置,那么就设置为1 ,但是设置为 1 后,你得指向一个文件,告诉系统究竟修改了一些什么了。某手机厂商为了手机速度更快,增加内存到512M,并且设置了一个文件,告诉系统,这个手机是用512M内存的,不是256M。

然后某个人开始使用带有优化指令的手机,过了一段时间,又换了新手机后,发现配置接近,但是性能却不一样,于是对比原来手机的文件,发现了这个指令,于是进行修改了,并且很有兴致的告诉别人,但是实际上,他用的新手机并没有设置优化指令啊,开启了以后等于没开启,甚至由于系统找不到优化指令,但是设置又告诉他有优化指令,弄得系统也不知所措,运行更慢,或者出现问题........

但是,由于这个人的“新发现”,弄得这个简单的0和1 成为了一代传说(或者是一代流言)

特别声明:红字部分仅为个人猜测。

由于手头资料有限,可能本人有错漏,欢迎指正。

有人说,现在所有的自制ROM都改了这2个参数了,其实,至少我的ROM从来都不改的,有兴趣可以用我的ROM研究一下。

ROM地址:https://www.360docs.net/doc/961443008.html,/thread-287704-1-1.html

还有一部分:

[ hide]

其实帖子到这里就结束了,

看完帖子的筒子们都来发动思维的浪潮,来讨论一下吧!

设置回复可见纯属无奈,如果不设置,一下子帖子就沉了,那么别人也看不到帖子,就无法参与讨论,作者的心血也白费了,所以对于好的帖子,大家以后尽量多发有质量的回复,以引导帖子良性发展,不要只发一些没有质量的水贴回复,谢谢!

[/hide]

java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案

大概原因,就是java堆内存不足以运行JVM,需要增加内存。 网上搜索此问题,大部分都是针对某个程序进行修改JVM内存的解决方法,比如eclipse,等。试问,若是其他程序出现问题了呢? 现在给出一个全局的java虚拟机修改内存的方法。在WIN XP,WIN 7,WIN8都可以。 解决方案:增加一个系统环境变量 变量名:_JAVA_OPTIONS 变量值:-Xmx512M 保存后,就OK!! 下面给出关于java堆内存的一个介绍,这是一个英文网页的翻译过来的。 关于java堆内存: Java -Xmx is the configuration parameter to control the amount of memory Java uses on a system. Basically these settings are there to control the Heap memory size of Java. There are two settings related to Java heap memory: ?-Xmx to set the maximum heap memory size ?-Xms to set the minimum heap memory size Tips to set the Java heap memory size

Managing the Java heap memory size for a server is very crucial as the whole performance depends on this memory size, off course there are other factors which affects the performance. So let’s see how you can set these parameters to control the Java heap memory size. Do not set -Xmx to too small value If you set -Xmx too small for your server then your application may not work properly and you may get Out of memory exception. So never set this too small as this is the maximum amount of memory you are allocating for Java and it cannot utilize memory beyond the set value. It is always advisable to set -Xmx to a higher value if you have enough memory space available on your server. On the other hand if you set -Xmx value to a higher value your other resources will not be able to perform well as you have already reserved some of your memory for Java. So before setting the maximum heap size memory just check how much memory is free. To do so, stop your application server and check the free memory and accordingly you can set the maximum memory size. For example if you have 512M free memory then you can set heap memory to 300M safely i.e. -Xmx300m.

(完整版)虚拟机迁移原理详解

虚拟机到虚拟机的迁移(Virtual-to-Virtual) V2V 迁移是在虚拟机之间移动操作系统和数据,照顾主机级别的差异和处理不同的虚拟硬件。虚拟机从一个物理机上的VMM 迁移到另一个物理机的VMM,这两个VMM 的类型可以相同,也可以不同。如VMware 迁移到KVM,KVM 迁移到KVM。可以通过多种方式将虚拟机从一个VM Host 系统移动到另一个VM Host 系统。 V2V 离线迁移 离线迁移(offline migration):也叫做常规迁移、静态迁移。在迁移之前将虚拟机暂停,如果共享存储,则只拷贝系统状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行。如果使用本地存储,则需要同时拷贝虚拟机镜像和状态到目的主机。到这种方式的迁移过程需要显示的停止虚拟机的运行。从用户角度看,有明确的一段服务不可用的时间。这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。 V2V 在线迁移 在线迁移(online migration):又称为实时迁移(live migration)。是指在保证虚拟机上服务正常运行的同时,虚拟机在不同的物理主机之间进行迁移,其逻辑步骤与离线迁移几乎完全一致。不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机运行,当迁移进行到一定阶段,目的主机已经具备了运行系统的必须资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,服务在目的主机上继续运行。对于服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。在线迁移适用于对服务可用性要求很高的场景。 目前主流的在线迁移工具,都要求物理机之间采用SAN(storage area network),NAS(network-attached storage)之类的集中式共享外存设备,因而在迁移时只需要考虑操作系统内存执行状态的迁移,从而获得较好的迁移性能。

Java虚拟机(JVM)参数配置说明

Java虚拟机(JVM)参数配置说明 在Java、J2EE大型应用中,JVM非标准参数的配置直接关系到整个系统的性能。 JVM非标准参数指的是JVM底层的一些配置参数,这些参数在一般开发中默认即可,不需要任何配置。但是在生产环境中,为了提高性能,往往需要调整这些参数,以求系统达到最佳新能。另外这些参数的配置也是影响系统稳定性的一个重要因素,相信大多数Java开发人员都见过“O utOfMem ory”类型的错误。呵呵,这其中很可能就是JVM参数配置不当或者就没有配置没意识到配置引起的。 为了说明这些参数,还需要说说JDK中的命令行工具一些知识做铺垫。 首先看如何获取这些命令配置信息说明: 假设你是windows平台,你安装了J2SDK,那么现在你从cmd控制台窗口进入J2SDK安装目录下的bin目录,然后运行java命令,出现如下结果,这些就是包括java.exe工具的和J VM的所有命令都在里面。 ----------------------------------------------------------------------- D:\j2sdk15\bin>java Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -client to select the "client" VM -server to select the "server" VM -hotspot is a synonym for the "client" VM [deprecated] The default VM is client.

Hyper-V动态内存与VMware内存过量使用的对比

Hyper-V 动态内存与VMware 内存过量使用的对比动态内存(Dynamic memory)是微软应对虚拟化中常见问题所做的努力:如何有效地分配内存给不是一直需要它的虚拟机。 内存一直是人们最先耗尽的关键资源。结果是,缺少内存会是固结率低的起源。压力还来自于某些应用所有人,他们为应用索要尽可能多的内存,即使是没有必要分配他们需要的内存量。 在理想世界中,用户能分配大量内存并在需要使用这些内存时按需使用它们。有时候Hyper-V 的情况并不如此: 如果在虚拟机启动时给它分配4GB内存,不管它需不需要,它占有这4GB的内存,在VM关闭之前它不会把内存返还给Hyper-V 。这不可避免地会导致固结率低于微软的竞争者,这也让它很难以有效的方式分配内存。 随着Hyper-V R2 SP1的发布,微软添加了动态内存支持,这和它主要的竞争产品VMware ESX中利用的内存过 量使用( memory over-commitment )非常不一样。微软长时间声称,虚拟机承担的内存超过物理量很危险,因为所有这些虚拟机也许同时需要分配。不管这是否是真实情况,我们一般在其它IT 领域使用超额认购 ( over-subscription ),如存储,微软的立场在微软社区得到应用。 动态内存本质上平衡了来宾操作系统的管理系统功能来达成其目的。它主要依赖于大部分现代服务器和操作系 统的容量来实现实时的内存添加和移除。动态内存背负该功能,允许Hyper-V 在虚拟机运行时在其上添加或移除内 存。一旦服务器启动,Hyper-V 显示一池免费内存。虚拟机都是从这个池中分配内存。如果Hyper-V 主机本身需要 更多内存,也可以用恰好相同的方式增加。动态内存和内存过量使用不同,因为Hyper-V 会拒绝保证超过池中可用 的物理内存。通过从来宾操作系统中平衡热添加和热移除功能来保证内存从虚拟机返回到系统。让我们来看看动态内存评价该方法功绩的要求。 首先,Hyper-V和现有的Windows虚拟机必须有应用其上的SP1。新版的Windows 7和Windows 2008 R2可能 已经安装好了服务包。 另外,Hyper-V 可以在每虚拟机的基础上完成,所有虚拟机都默认地与静态内存模式一致。

JAVA虚拟机性能参数调优指导书

Java虚拟机性能参数调优指导书 (仅供内部使用)

目录 1概述 (5) 2JAVA虚拟机运行机制概览 (5) 2.1运行时分析 (5) 2.2垃圾收集和线程同步 (7) 3JAVA虚拟机参数分类说明 (8) 3.1Java虚拟机标准参数 (8) 3.2Java虚拟机扩展参数 (10) 4JAVA应用性能测试调优经验总结 (13) 4.1GC调优参数的使用 (13) 4.2JIT调优参数的使用 (14) 4.3Java线程调优参数的使用 (14) 5结束语 (15) 6参考文献 (15)

表目录 表1 JVM 标准参数集 (10) 表2 JVM 扩展参数集 (10) 表3 JVM GC/Hotspot相关参数集 (12) 表4 JVM 性能统计参数集 (13)

错误!未找到引用源。 关键词:Java、垃圾收集、虚拟机、即时编译 摘要:随着JAVA在应用系统级的项目开发中的使用越来越广泛,虚拟机、垃圾收集、热点编译、J2EE等新技术层出不穷,JAVA作为系统级开发的一个选择的优势也越来越明显,在此同时 其不能完全编译、垃圾收集等与生俱有的特征也使得JAVA备受争议的“慢”得到更多的关 注。本文通过对JAVA虚拟机的运行机理的分析,以及JAVA虚拟机参数使用说明等描述,试 图使读者能够更好的运行他的基于JAVA的应用系统,以最小的代价换取最大的收益。 缩略语清单: 缩略语英文全名中文解释 JAVA SUN公司发明的一种语言 JVM Java Virtual Machine JAVA虚拟机 GC Garbage Collection 垃圾收集 HotSpot Java虚拟机内部的一种热点编译技术 JIT Just-In-Time 即时编译技术

关于性能测试中使用物理机和虚拟机的区别

关于性能测试中使用物理机和虚拟机的区别 需要说明的情况,以下对比表格主要针对性能测试: 举例的物理机和虚拟机的数值 CPU 2Ghz 内存4GB 网卡100M 硬盘200G 虚拟机所在的物理机器称之为“宿主机”,单独的物理机和虚拟机是在数值等同的情况下进行以下比对:

其他: VM实现: VMware 虚拟化的工作原理是,直接在计算机硬件或主机操作系统上面插入一个精简的软件层,用软件模拟计算机软硬件环境,占用物理机本身的资源,将这部分资源“硬件化”--划分了一个特定的可以格式化的分区,在其中包含cpu的应用资源、内存、硬盘、网络资源等等,建立完整的运行环境。 1,虚拟机的CPU实现: 由于虚拟机是基于一个软件层实现的,CPU的处理能力实际上是物理机进程调度虚拟机组件来实现的,虚拟机的CPU取决于宿主机的CPU分配。 2,虚拟机的内存分配: 无论怎样分配,推荐的内存的大小值不能超过所在的物理宿主机的内存,而且物理机的内存动态调整会直接影响到虚拟机的内存使用率;如果内存值大于宿主机的物理内存值,最终还是会导致宿主机本身在内存和硬盘间调度。 同时,虚拟机的内存实际使用率低于虚拟机的内存分配值,仍有一部分用于虚拟机的运作-以上两个原因决定了虚拟机的内存值是一个时刻变动的动态值,并且在物理机内存恶化的情况下,表现更糟糕。

3,虚拟机的网络使用: 1.桥接Bridge bridge方式里面,就是利用网卡的这种功能为每一个VM分配一个外网的IP;每个VM在网络上的地位与宿主机是对等的。可认为每一个VM都是一个网络上的物理机。

2.Host only 第3种的NAT方式实际上是在这种方式上加了一个功能而已(增加一项NAT服务)。host only 用的是vmnet1,它包括两个组件,一个虚拟的网卡(Host Virtual Adapter),一个网拟的交换机(Virtual Switch),虚拟的网卡自动连到这个交换机上。Host Virtual Adapter和各个虚拟机的网卡一起已经组成了一个局域网,而且Host Virtual Adapter所在的宿主机还有一个网卡(物理网卡)连接着外网—不过这个宿主机上的两个网卡间不能通信。虚拟网卡不能和物理网卡通讯,导致了VM不能访问外网,但通过Host Virtual Adapter,VM们可以访问host,所以叫做host only。 另外,让VM们能够访问外网的方法: 把host 配置成一个简单的NAT服务器:在Windows XP 下使用的方法:打开网络连接,右击物理网卡的连接,属性,高级,找到 Internet Connection Sharing(ICS),勾选,VMware默认装了两个网卡:vmnet1和。确定vmnet1共享物理网卡的IP,XP会弹出一个对话框,提示再用共享文件--使用ICS后,不能在局域网里共享文件---系统会将vmnet1上的 Host Virtual Adapter的IP设为 192.168.0.1,未提供DHCP,将VM的IP静态地设为192.168.0.x,网关设成Host Virtual Adapter(192.168.0.1),VM们的DNS也要设置成静态的,最好设置成宿主机的DNS。

提高VMware虚拟机运行速度的方法

提高VMware虚拟机运行速度的方法 当我们在VMware Workstation中安装好虚拟操作系统,特别是安装好Windows 8系统以后,在VMware中启动Windows 8,会发现VMware的运行速度出奇地慢……。 有没有解决VMware虚拟机运行速度慢的方法呢? 有!下面就推荐VMware Workstation 8中的优化技巧,可以大大提高VMware虚拟机的运行速度! VMware虚拟机的全局设置 1. 启动VMware Workstation,打开“VMware Workstation”窗口。如下图所示: 注:按下F9快捷键可以打开或关闭“库”。 2. 点击“编辑”菜单,在下拉列表中点击“参数”命令,打开“参数”对话框。如下图所示:

3. 在对话框左侧选择“内存”项,在右侧: 保留的内存:尽可能为虚拟机保留更多的内存。在本机的设置中,能够保留的内存在128MB-2241MB之间。 额外的内存:选择第一项“适应所有的虚拟机内存到保留的主机内存”。这样,虚拟机就只会读取物理内存,而不会读取硬盘了。这是提高VMware虚拟机运行速度的最基本的方法。当然,要保证宿主机有足够的物理内存空间供虚拟机使用,否则会出现内存争用的情况。 第二项和第三项都需要虚拟机内存和硬盘进行交换。这样,启动虚拟机时,会因为读取硬盘而导致虚拟机的运行速度明显下降。所以不要选择这两项。 4. 现在设置“优先级”。如下图所示:

5. 在对话框左侧选择“优先级”,在右侧点击“捕获输入”右边的向下箭头,选择“高”。点击“确定”按钮关闭对话框。 单个VMware虚拟机的参数设置 下面以Windows 8虚拟机为例进行参数的设置: 1. 打开“Windows 8虚拟机”窗口。如下图所示:

Eclipse中JVM内存设置

Eclipse中JVM内存设置 eclipse.ini内存设置 -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M 这里有几个问题: 1. 各个参数的含义什么? 2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动? 3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置? 下面我们一一进行回答 1. 各个参数的含义什么? 参数中-vmargs的意思是设置JVM参数,所以后面的其实都是JVM的参数了,我们首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。 堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memo ry)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。 堆内存分配

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-X mx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。 非堆内存分配 JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxP ermSize设置最大非堆内存的大小,默认是物理内存的1/4。 JVM内存限制(最大值) 首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,J VM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows 系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。 2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动? 通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种:堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统。所以说设置VM参数导致程序无法启动主要有以下几种原因: 1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize; 2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。 3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置?

JAVA虚拟机内存分配机制

JA V A虚拟机内存分配原则 Java把内存划分成两种:一种是栈内存,一种是堆内存。 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。 引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。 具体的说: 栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java 的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。 栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义: int a = 3; int b = 3;

VMware内存分配

虚拟机内存分配VMware ESX(i)提供了三个参数来控制虚拟机的内存分配。 “限制(Limit)”限定了分配给虚拟机物理内存的上限,如果虚拟机使用的内存超过该限定值则hypervisor 强制回收内存,默认是无限制,即以虚拟机内存大小为限。虚拟机硬件设置中的内存对于大多数Guest OS 是不能热添加的,有的能热添加但是要使用添加的内存还要重启Guest OS,只有少数Guest OS能热添加并使用的,因为这个需要Guest OS识别,因此对Guest OS要求高。但是内存限制可以在虚拟机运行时随意的调整,Guest OS无需感知是透明的。 “预留(Reservation)”是保证分配给虚拟机最低物理内存的下限,即hypervisor至多从虚拟机回收内存到预留值为止,不再继续回收,保证一个基本的内存可避免性能降低到无法忍受。 “份额(Shares)”是当主机内存过量使用时,虚拟机可获得的物理内存是通过一个公式计算得到的,份额是其中一项。默认份额=虚拟机内存*10。公式:ρ=份额/(活动内存+k*空闲内存),ρ就是该虚拟机可获得物理内存比例的分子,分母是所有虚拟的ρ的和。k是惩罚因子,k=1/(1-IMT),IMT为空闲内存税(Idle Memory Tax),默认IMT=75%,即k=4,IMT值可以在ESX(i)的高级设置中修改。显然份额越大,活动内存比例越高则ρ越大,可获得的物理内存越多。hypervisor从ρ最小的虚拟机开始回收内存。 简单实例: 比如我们创建VM虚拟机的时候分配内存是4G,你们为了服务器性能和节省内存我们可以,在“虚拟主机属性”--“资源”--“内存“中设置预留1500MB 限制3500MB

Java虚拟机的内存结构

我们都知道虚拟机的内存划分了多个区域,并不是一张大饼。那么为什么要划分为多块区域呢,直接搞一块区域,所有用到内存的地方都往这块区域里扔不就行了,岂不痛快。是的,如果不进行区域划分,扔的时候确实痛快,可用的时候再去找怎么办呢,这就引入了第一个问题,分类管理,类似于衣柜,系统磁盘等等,为了方便查找,我们会进行分区分类。另外如果不进行分区,内存用尽了怎么办呢?这里就引入了内存划分的第二个原因,就是为了方便内存的回收。如果不分,回收内存需要全部内存扫描,那就慢死了,内存根据不同的使用功能分成不同的区域,那么内存回收也就可以根据每个区域的特定进行回收,比如像栈内存中的栈帧,随着方法的执行栈帧进栈,方法执行完毕就出栈了,而对于像堆内存的回收就需要使用经典的回收算法来进行回收了,所以看起来分类这么麻烦,其实是大有好处的。 提到虚拟机的内存结构,可能首先想起来的就是堆栈。对象分配到堆上,栈上用来分配对象的引用以及一些基本数据类型相关的值。但是·虚拟机的内存结构远比此要复杂的多。除了我们所认识的(还没有认识完全)的堆栈以外,还有程序计数器,本地方法栈和方法区。我们平时所说的栈内存,一般是指的栈内存中的局部变量表。下面是官方所给的虚拟机的内存结构图

从图中可以看到有5大内存区域,按照是否被线程所共享可分为两部分,一部分是线程独占区域,包括Java栈,本地方法栈和程序计数器。还有一部分是被线程所共享的,包括方法区和堆。什么是线程共享和线程独占呢,非常好理解,我们知道每一个Java进行都会有多个线程同时运行,那么线程共享区的这片区域就是被所有线程一起使用的,不管有多少个线程,这片空间始终就这一个。而线程的独占区,是每个线程都有这么一份内存空间,每个线程的这片空间都是独有的,有多少个线程就有多少个这么个空间。上图的区域的大小并不代表实际内存区域的大小,实际运行过程中,内存区域的大小也是可以动态调整的。下面来具体说说每一个区域的主要功能。

关于vcenter中虚拟机CPU和内存显示异常的解决方法

关于vcenter中虚拟机CPU和内存显示异常的解决方 法 一、故障现象: 云平台中,通过vcenter,可以查看物理机上的虚拟机资源使用情况,如图1所示。 图1 正常显示虚拟机状态信息 但有时却查看不到虚拟机的CPU、内存、风扇、电源等状态信息,虚拟机仍可以正常启动和关闭,如图2所示。 图2 异常显示虚拟机状态信息 在vcenter物理机的的“摘要”选项中,CPU与内存的使用情况也统计出错,如图3所示。 图3 “摘要”中CPU与内存资源状态也无法显示。 二、故障分析 发生这个问题后,虚拟机平台和承载的业务系统仍可以正常运行,物理机上的虚拟机也可正常操作。

通过仔细分析和查看,发现vcenter的硬件状态插件被禁用,如图4所示。 图4 vcenter Server中硬件状态插件被禁用 如果“插件管理器”中的硬件状态功能没有被禁用,那么在出现图2的错误提示时,则会在“硬件状态”中显示当前服务器己关闭电源,但服务器实际上是正在运行的。 在vcenter的某个群集中,如果出现以上这种错误,当集群中的某台物理主机意外宕机时,正常情况下,出现故障的主机上的所有虚拟机会自动迁移到群集中其他主机上,但由于vCenter Server 认为其他主机已经处于“关机”状态,那么vCenter Server就会认为集群中没有可用的主机,它就不会在其他主机上重新启动这些虚拟机,因而会造成业务长时间中断。 三、解决方法 为彻底解决这种虚拟化故障,建议重新安装vCenter Server、配置群集,然后再将ESXi主机添加到数据中心。如果因为业务需求无

法这样做的话,也可分批将出现故障的ESXi Server从vCenter Server中先移除出来,然后重启,再将其添加进来,问题也可以解决。 具体步骤如下: 1、先将出现故障的ESXi物理主机上的虚拟机手动迁移到其他主机上。 2、在所有虚拟机迁移完成后,先将当前物理主机置于“维护模式”,然后从vCenter中“移除”该ESXi物理主机,如图5所示。 3、当ESXi主机移除之后,重启后,再将该物理机重新添加到vCenter Server中,问题即可解决。 图5 进入维护模式并移除物理机

JVM内存设置方法

几招轻松搞定JVM内存设置 2010-09-17 14:04 gk23 javaeye 我要评论(0)字号:T | T 你知道如何进行JVM内存设置吗,这里向大家描述一下,设置JVM内存的参数有四个:分别是-Xss 每个线程的Stack大小;-Xmx Java Heap最大值;-Xms Java Heap初始值和-Xmn Java Heap Young区大小。 AD:本文向大家简单介绍一下进行JVM内存设置几种方法,安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一个JRE。如果只是运行Java程序,则JRE已足够;而JDK则只有开发人员才用到。这里将为大家介绍设置JVM内存分配的几招。 浅谈JVM内存设置的几个妙招 一、设置JVM内存设置 1. 设置JVM内存的参数有四个: -Xmx Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定; -Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值; -Xmn Java Heap Young区大小,不熟悉最好保留默认值; -Xss 每个线程的Stack大小,不熟悉最好保留默认值; 2. 如何分配JVM内存设置: (1)当在命令提示符下启动并使用JVM时(只对当前运行的类Test生效): 1.java -Xmx128m -Xms64m -Xmn32m -Xss16m Test 2. (2)当在集成开发环境下(如eclipse)启动并使用JVM时: a. 在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的JVM内存分配):

深入理解Java虚拟机(JVM)

深入理解Java虚拟机(JVM) 一、什么是Java虚拟机 当你谈到Java虚拟机时,你可能是指: 1、抽象的Java虚拟机规范 2、一个具体的Java虚拟机实现 3、一个运行的Java虚拟机实例 二、Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。你在同一台机器上运行三个程序,就会有三个运行中的Java 虚拟机。 Java虚拟机总是开始于一个main()方法,这个方法必须是公有、返回void、直接受一个字符串数组。在程序执行时,你必须给Java虚拟机指明这个包换main()方法的类名。 Main()方法是程序的起点,他被执行的线程初始化为程序的初始线程。程序中其他的线程都由他来启动。Java中的线程分为两种:守护线程(daemon)和普通线程(non-daemon)。守护线程是Java虚拟机自己使用的线程,比如负责垃圾收集的线程就是一个守护线程。当然,你也可以把自己的程序设置为守护线程。包含Main()方法的初始线程不是守护线程。 只要Java虚拟机中还有普通的线程在执行,Java虚拟机就不会停止。如果有足够的权限,你可以调用exit()方法终止程序。 三、Java虚拟机的体系结构 在Java虚拟机的规范中定义了一系列的子系统、内存区域、数据类型和使用指南。这些组件构成了Java虚拟机的内部结构,他们不仅仅为Java虚拟机的实现提供了清晰的内部结构,更是严格规定了Java虚拟机实现的外部行为。 每一个Java虚拟机都由一个类加载器子系统(class loader subsystem),负责加载程序中的类型(类和接口),并赋予唯一的名字。每一个Java虚拟机都有一个执行引擎(execution engine)负责执行被加载类中包含的指令。 程序的执行需要一定的内存空间,如字节码、被加载类的其他额外信息、程序中的对象、方法的参数、返回值、本地变量、处理的中间变量等等。Java虚拟机将这些信息统统保存在数据区(data areas)中。虽然每个Java虚拟机的实现中都包含数据区,但是Java虚拟机规范对数据区的规定却非常的抽象。许多结构上的细节部分都留给了Java虚拟机实现者自己发挥。不同Java虚拟机实现上的内存结构千差万别。一部分实现可能占用很多内存,而其他以下可能只占用很少的内存;一些实现可能会使用虚拟内存,而其他的则不使用。这种比较精炼的Java虚拟机内存规约,可以使得Java虚拟机可以在广泛的平台上被实现。 数据区中的一部分是整个程序共有,其他部分被单独的线程控制。每一个Java虚拟机

修改虚拟机内存 和开启“硬件加速

昨晚回复了一个帖子,内容比较经典,所以特开一贴,大家可以研究一下! 主要是机子里的关于系统性能的2个参数: 1. debug.sf.hw=0,修改为debug.sf.hw=1,此步骤为打开硬件加速 2. dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m 上面的第二点注意,这是修改虚拟机内存,不是修改虚拟内存!!这2者完全不同! 最近论坛里关于修改安卓系统2个参数的帖子很火,说修改后可以提升手机的性能。修改后有说好用的,也有说不好用的,好用的把楼主捧为了神,不好用的把楼主骂个半死,其实科学嘛,总有好处有坏处的,我们只要好好分析,就能得知我们为什么要改,还有修改后可以得到什么样的益处。捧别人为神或者踩别人为泥都对事情发展没有好处。 关于修改的内容,主要是修改2个参数: debug.sf.hw=0,修改为debug.sf.hw=1,此步骤为打开硬件加速 dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m 我来跟你解释这2个参数有什么作用,并且说说为什么我做ROM的时候不修改这2个参数。 1. dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m 安卓系统实际上,就是建立在linux内核上的一个JAVA系统,了解JAVA的同学应该知道,在运行JAVA 程序的时候,需要在每个程序上建立一个虚拟机,以获得内存的分配,优点是假设某个程序崩溃了,系统只要关闭那个虚拟机就可以了,不会影响其他程序,缺点是很耗内存,因为你每开一个程序,就要新开一个虚拟机。 举个例子,打开程序A 的时候,程序A 就自动向系统申请1份虚拟机内存,然后不关闭,再开一个程序B ,程序B要求向系统申请3份内存,假设虚拟机内存设置为24M ,那么这2个程序合共占用了内存1X24 + 3X24 = 96M 。假设虚拟机内存设置为32M ,则这2个程序合共占用了内存1X32 + 3X32 =128M 那么,究竟修改好,还是不修改好呢? 假设你的机子里,平常只运行一些小程序,例如QQ、看书软件、小游戏等,那么建议你不要修改,就使用标准的24M,因为足够用,并且防止运行程序过多,而产生崩溃。那是不是越小越好呢?当然不是,因为分配给程序的内存过小,有可能因为软件申请不到足够的内存,而运行不流畅。 假设平常经常运行大型程序,例如大型3D游戏等,则可以稍微调大一些,以使大型程序得到足够的内存来运行,可以更流畅。那是不是越大越好呢,当然不是,因为调的太大,其他程序就分配不到内存,无法

虚拟机管理规范V1.0

虚拟机管理规范 一、总体要求 1、不要随意在公共场所安装虚拟机客户端,进行登录虚拟机操作。 2、虚拟机按需创建,做到专机专用,正式运行虚拟机和测试用虚拟机应分开,停用的虚拟机应及时删除。 3. 创建后的虚拟机及时登记并纳入服务器统一管理,每开通一个虚拟机要及时把虚拟机配置,用户名,密码,主机地址纳入管理库 二、虚拟机创建 1、虚拟机命名:使用[操作系统类型_虚拟机用途]的格式,如“Win2003_MIAP”、“CentOS_MIAP” 2、存储位置:虚拟机安装在挂载磁盘存储,一般不使用服务器自带存储。 3、虚拟机操作系统类型设置:根据准备安装的操作系统类型和版本进行设置。 4、CPU数量:根据每台服务器业务量分配CPU和内存,通常情况下选择2个CPU即可。 5、内存分配:根据虚拟机用途以及预期的负载分配内存。内存一般分为1G、2G、4G、8G通常情况下分配的大小不小于1G、不大于4G。内存总使用量一般不能超过服务器所配内存的75%

6、网卡:如无特殊需求只需配置一个虚拟网卡。 7、磁盘大小:虚拟磁盘初次分配不宜过大,以后可根据情况扩充。用于一般网站和应用系统的windows2003服务器磁盘容量应不小于35G。 三、创建虚拟机模板 创建虚拟机模板时应注意: 1、升级到最新的操作系统补丁并配置好自动升级的设置。 2、装操作系统后即创建虚拟机模板,以便以后使用。 3、虚拟磁盘容量初次分配不宜过大,满足操作系统需要并有一定保 留空间即可,日后可根据实际使用情况再增加磁盘容量。 四、虚拟机状态监控 每次进行服务器安全检查时应查看虚拟机工作状态。 1、虚拟机服务器(Host)运行状态。包括硬件工作状态、CPU、内存、网卡负载等。 2、各虚拟机(Guest)运行状态。包括虚拟硬件配置,Guest的CPU,内存,网卡负载等。 如果负载过重或存储容量不足,应及时调整虚拟机设置。 五、虚拟机参数配置 对虚拟机虚拟硬件的配置进行更改,应使虚拟机处于关闭电源

Websphere7.0修改JVM的内存设置

Websphere7.0环境下修改JVM的内存设置 方法1:修改配置的方式 通过修改server.xml进行JVM堆大小的设置: servel.xml文件路径:/IBM/WebSphere/AppServer/profiles/AppSrv01/config/cells/22Node01Cell/nodes/Node01/server s/server1 server.xml中修改或增加配置 ----------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------- 例如: 出示化内存:initialHeapSize="512" 最大可用内存:maximumHeapSize="2048" 配置建议: java虚拟机(JVM)堆大小设置会影响Java的垃圾回收。如果堆设置过大,会占用过多的内存,使内存资源减少,从而会频繁的进行I/O操作来使用虚拟内存;堆设置过小,会使得对象可分配空间变小,一方面会频繁的使用垃圾收集机制来释放内存空间(每次垃圾收集都会耗用系统资源),而且容易出现OutOfMemoryError。所以不能设的过小,也不能过大。一般将起始JVM堆大小设置为最大JVM堆的1/4。 方法2:通过Websphere控制台控制台修改 在控制台中单击服务器-> 应用程序服务器,如下图:

虚拟机内存工作原理VCP

虚拟机内存工作原理 Windows环境内存名词释义 Windows内存管理概述 在现代计算机系统中,内存是指CPU可以直接访问的随机存储器。在硬件上,CPU通过一组地址线连接到内存上,这组地址线称为内存总线。而在软件上,CPU的许多指令允许用内存单元地址作为指令的操作数,实现直接操纵这些内存单元。内存地址,在Intel x86 体系结构中,内存地址有三种类型: 物理地址即内存存储器的索引,CPU操纵内存芯片时,通过地址线管脚加上电信号来读或写相应的内存单元。在Intel x86体系结构上,物理地址是一个32位或36位的无符号整数。 虚拟地址:在32位系统上,虚拟地址空间可以达到4GB大小,也就是说,整个空间可以有232=4294967296个字节单元。Intel x86芯片内有专门的电路负责把一个虚拟地址转译成物理地址。 逻辑地址。逻辑地址包含两部分:段和偏移。段指定了在整个地址空间中的一个基地址、段空间的大小、属性。与寻址相关的是段的基址和大小。偏移部分指定了一个逻辑地址相对于段基址的偏移量。此偏移量不能超过段的边界。因此,逻辑地址的实际地址是段基址加上偏移量。Intel x86芯片也有专门的电路把逻辑地址转译成一个虚拟地址或物理地址。 把一个地址告诉CPU,让它访问相对应的物理内存单元,这一过程是操作系统和CPU相互协作来完成的。CPU最终需要的是一个物理地址,它必须把软件指令中的地址转译成物理地址,在转译过程中可能会涉及一些数据结构,甚至涉及I/O操作。 从操作系统的角度来看,一方面,它需要有效地管理所有的物理内存,使得当一个进程需要内存时,能够分配足够的内存单元给这一进程;另一方面,正如上一章所讲,进程代表一个相对独立的任务,它有一个逻辑上独立的地址空间。不同进程的地址空间应该是相互隔离的。实现每个进程都有自己的私有地址空间。 当系统中进程数量增加以后,所需内存数量往往超过了总的物理内存,在这种情况下,操作系统须合理地安排内存的使用,使得内存紧缺时,既不会波及系统本身的稳定性,同时也不会严重影响系统的性能。当发生这种情况时,一般的做法是把不紧急的进程中的数据或代码先存放到硬盘(pagefile)中,从而把它们占用的物理内存腾出来给紧急的进程使用,或者交给系统使用。当内存紧缺的状况缓解时,系统再把硬盘(pagefile)中的进程数据或代码装回到已经空闲下来的内存单元中,从而使这些进程有机会继续运行。这两个过程称为内存换出和换入。几乎所有的多进程操作系统都支持这种内存管理。 内存基本单元总是字节Bytes。每个内存地址指向一个字节,地址值加1以后指向下一个字节。物理内存的地址是固定的,故让进程使用物理地址来访问内存将使得进程的动态分配难以有效实施,因为内存单元与进程将通过物理地址紧密地联系在一起了,从而内存的回收和再分配将受限于特定的进程和物理地址。为打破这种关联关系,思路是让进程使用虚拟地址,而虚拟地址和物理地址之间通过一个映射表来完成转译。 1.1 pagefile:即windows安装过程中创建的分页文件,见下图。

相关文档
最新文档