剖析Windows用1G内存还慢的原因

现在的内存基本达到了1元/MB的均价,不少朋友的电脑告别了可怜的64MB、128MB内存,256MB已经成为标准配制,512MB甚至1GB的内存也不再是"耸人听闻"。但是有一件事情让很多朋友疑惑:"为什么使用1G内存我的Windows启动、软件运行速度还是这么慢?"

  安装大容量内存后,系统、程序运行效率没有得到大幅度提高,这是因为系统本身运行机制限制了其管理和运用硬件资源的能力。所以纵然硬件资源非常丰厚,如果超出了Windows管理的范围,那么性能也不会得到明显提升。

  内存和硬盘

  许多菜鸟常常将物理内存和硬盘混淆在一起,因为两者的容量都是用MB或GB这类的单位表示,说明物理内存和硬盘之间关系的最好比喻是:一个带一张桌子和一个文件柜的小办公室。

  文件柜就像硬盘,程序和数据可以长期安全地存放在那里,桌面代表物理内存,允许在办公桌上工作的人(作用和处理器相同)直接用放在桌面上的任何文件(程序和数据)。为了对一个特定文件进行操作,首先必须从文件柜中取出文件并放在桌面上。如果桌面够大,可以在桌面上同时打开多个文件。类似地,如果你有更多物理内存,那么可以运行更多或更大的程序并对更多或更大的资料进行处理。

  给电脑增加硬盘空间就好比在办公室里放一个更大的文件柜,而增加更多内存就好比得到一个更大的办公桌,可以同时对更多程序和数据进行操作。

  一、Windows这样使用内存

  想要知道为什么系统速度提升不再明显,必须先理解Windows 怎样使用内存。这里要涉及一个概念——资源。

  这不是平时所说的CPU资源,内存资源或统一的"系统"资源。我们接下来要讲到的"资源"就是程序可以操纵的Windows物件。举例来说,屏幕上显示的每个窗口都是一个资源,每幅图片也都可以能是一个资源。如果一个应用程序打开了磁盘上的一个文件,那么这个被打开的文件也是一个资源。以此类推,如果一个应用程序需要使用一个资源,它就会向操作系统提出请求,要求新建一个或从存储器里调用。

  1.情景再现:程序与系统的对话

  程序说:"嗨,Windows,我要新建一个300像素宽,200像素高的窗口,ok?"于是,Windows立即按要求创建或调用这个资源进内存,然后反馈给应用程序一个代号:"好,我已经创建好你要的窗口,它的代号是#38710。"此后,需要用到新建的这个窗口时,应用程序都用Windows反馈的代号代表这个资源。"Windows,麻烦你在显示屏幕左上角显示#38710。""好!"最后,当应用程序不需要用到该资源的时候,它会要求Windows去除这个资源。"OK,请你删除#38710。""好!"。

  2.指针——内存中的邮政编码

  那么这个代号是依据什么标准生成的呢?在绝大多数操作系统中,它是靠一种叫做"指针"的东西来确定的。你可以把整个内存想像成一个邮局,邮递员把需要寄往各地的信件分类放到很多个不同的信箱里。信箱一个接一个,足足占据了一堵墙。每个心细那个都装了一些信件,包含要送往一个特定地区的信息。而且,就好像每个地区都有邮政编码一样,每一块可以存储数据的内存空间也有一个地址——指针。代表这个存储空间的一串数字。内存中某部分数据的"指针",也就是这些数据占据的第一处内存空间的地址。所以,如果我是一个普通的操作系统,有一个应用程序要求我调用一个窗口,我就会按照它告诉我的要求调用这个窗口进内存,如果这个资源的数据在内存中存储的地址开始于#1234567,那么我就会返回一条信息给应用程序:"好了,我调出了这个窗口,它是#1234567。"

  3.解决指针带来的问题

  在PC中,这种指针有4个字节长。所以如果一个应用程序需要给内存里的某个数据配一个指针,那就需要4字节的内存空间。这样的工作方式给早期的Windows设计者带来了不小的麻烦,因为那时制作工艺尚不发达,内存非常昂贵,一台电脑上有8MB的内存就足以让用户无数次从梦里笑醒了,大多数电脑只能配制4MB内存。在内存如此紧张的情况下,一个应用程序却经常需要用到几百万个资源。要用这些资源,就要个每个资源配发一个指针。每个指针占据4个字节,几百万个指针,就会消耗掉数量客观的一块内存空间。这就好比一份钱很少,但如果要发给全国人民每人一份钱,那就是至少一千三百万元的巨款了。

  所以,Windows设计者采用了另外一种替代方案。他们创建了资源表。就是把当前调入内存的所有资源的信息登记到一个清单。这样一来,当应用程序要求系统调用一个资源时,系统调用后就不给它配发指针了,而是直接告诉应用程序该资源在资源表中的序号。"好了,我已经调用了你需要的资源,它在资源表里面的序号是#383"因为需要不是内存地址,所以就可以用一个只需占用2字节的数字表示。这只是两个字节的差距。但当你只有几MB内存,而你运行的程序动咎调用大量资源时,这两字节的差距就会带来很大的优势。

  你知道吗?

  微软64位操作系统没1GB内存就别玩

  在32位Windows 2000/XP中,最大支持4GB的内存,每个应用程序最多只能使用2GB内存,因为另一半的内存也留给系统使用了。而在64位WindowsXP中,这个限制没有了,每个程序能完全使用4GB内存,除Windows,微软还在开发64位版本的SQL Server 2000和Windows Server2003,不过要运行这些应用程序,需要你的电脑至少得有1GB内存。

  4.时过境迁,妙计成缺陷

  但这种方法也有它的弊端——两个字节能够表现的不同数字非常有限

  我们可以做个实验:请你写不同的数字。如果只准你写一位数,那就只能写出十个不同数字。如果限制写两位数,虽然能写出更多,但总数仍然有限。以此类推,允许位数越多,能写出的不同数字就越多。但只要位数有限制,写出的不同数字的总数就始终有限。同理,如果允许系统使用4字节的序号,那么在这个"位数限制"下,可以有几十亿个不同的序号可供使用。但如果只准系统使用2字节序号,能用的序号就会锐减到65536个。于是,前面我们讲的资源表就不能无限的拉长。其中的序号最多只有65536个

  于是问题来了。当调用了65536个资源后,再想调用更多的资源,纵然内存空间还有1GB,足以存储数百亿个资源,但只有2字节的资源表却无法生成更多的序号!没有序号,就意味着无法将各资源区分开来,应用程序自然无法使用这些没有"户口"的资源!事实上,因为没有序号可用,系统根本无法同时调用65536个以上的资源。

  但在10MB内存都是奢望的年代,要同时调用数十万个资源根本就是"无稽之谈"。所以当时的Windows设计者们没有把这个问题放在心上,果断地选用了资源表,选用了2字节序号。

  今天,操作系统算是得到报应了。内存便宜了,资源表和2字节序号仍然给我们节省了内存空间,但它带来的坏处却远远超过了它带来的好处。我们有足够的内存空间,可以调用数百万个资源,但资源表里面只有65536个序号!所以同一时间内,内存中只能有65536个资源!还有1GB内存空间可用?等着吧!

  5.真正"耗资源"的是谁?

  明白了上面的道理,就不难分辨除了大个文件,大个程序外,真正消耗系统资源的是哪些程序了:

  ★ 调用大量细小资源,把桌面装饰的花里胡哨的软件

  ★ 各种多媒体播放软件

  ★ 监视系统的工具软件

  ★ 能在字体菜单里面预览字体的应用程序(如MS Office)

  另外,在Windows 9x n/Me中运行16位程序(如DOS程序)时,Windows会划定一块内存供所有这类程序使用。除非所有16位程序都已经关闭,这块内存是不会被释放的。

  6.大内存的优势到底在哪里?

  难道大内存就没有作用了吗?内存厂商在骗钱?当然不是。当一个应用程序被启动后,Windows的一些组件也随之被启动,这是很常见的事情。当应用程序被关闭,Windows会保留那些组件不关闭,因为可能很快还要用到。同理,程序启动时调进内存的少数资源,也不会随着程序关闭而退出内存。

  这时,大内存的有时正可以得到体现了。一方面,大内存可以一次性容纳大量数据,减少使用性能远不如内存的硬盘作为虚拟内存使用的几率,提高数据调用速度。另一方面,关闭程序过后,更多的常用数据会有充足的空间保留在内存中不被清除。一旦重启程序,你会发现明显比使用小内存时快!

  二、大内存使用精要

  1.把内存变成你的硬盘

  如果你的内存实在富裕,那么可以使用微软专门为Windows2000设计的RAMDISK,它能把部分内存虚拟成一块硬盘,把本来保存在硬盘的数据虚拟到内存中。比如,将Windows的临时文件,Internet的临时文件放置到这个虚拟磁盘中。大家知道,内存的速度要比硬盘速度快多了,这样能大幅提高数据读取速度,使Windows运行更加高效,同时,由于数据实际保存在内存中,所以在关机后,其中的数据就会消失,因此能在一定程度上加强系统安全性。

  第一步:从http://www.download.mocrosoft.com/download/win2000ddk/sample01/1/nt5/EN-US/ramdisk.exe下载RAMDISK。并将其解压缩到一个临时文件夹中,比如C:\RAMDISK

  第二步:点击"开始è设置è控制面板",双击打开"添加/删除硬件",接着选择"添加/排除设备故障"并单击"下一步按钮";在出现的"选择一个硬件设备"窗口中选中"添加新设备"项,然后单击"下一步"按钮;在接下来的窗口中选择"否,我想从列表中选择硬件"并单击"下一步"按钮;接着在"硬件类型"列表中选择"其他设备"并单击"下一步";在出现的窗户口中单击"从磁盘安装"按钮,在弹出的"从磁盘安装"窗口中将"厂商文件复制来源"设置为"c:\RAMDISK",确定后即出现选择窗口,选中"型号"列表中的"Ramdisk Driver"项并单击"下一步"按钮,期间Windows会出现"没有找到数字签名"的对话框,单击"是"按钮进行安装。

  第三步:打开"记事本",输入一下文字,并将其保存为Ramdisk.reg

  Windows Registry Editor Version 5.00

  [HEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\Servioes\Ramdisk\Parameters]

  "BreakOnEntry"=dword:00000000

  "DebugLevel"=dword:00000000

  "DebugComp"=dword:ffffffff

  "DiskSize"=dword:01f00000

  "DriveLetter"="R:"

  "RootDirEntries"=dword:00000200

  "SectorsPerCluster"=dowrd:00000002

  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]

  "TEMP"="R:\\"

  "TMP"="R:\\"

  [HKEY_CURRENT_USER\Environment]

  "TEMP"=R:\\"

  "TMP"="R:\\"

  [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]

  "Cache"="R:\\"

  [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]

  "Cache"="R:\\"

  [HKEY_USERS\.DEFAULT\Environment]

  "TEMP"=R:\\"

  "TMP"="R:\\"

  [HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]

  "Cache"="R:\\"

  [HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]

  "Cache"="R:\\"

  完成后,双击Ramdisk.reg,将其导入注册表。以上注册表数据可以在www.cfan.com.cn下载。

  小提示

  Ramdisk.reg文件中键含义为:

  Parameters:设置Ramkisk的盘符为R,大小为30.9MB

  Session Manager\Environment:设置系统的TEMP和TMP环境变量到虚拟驱动器R。

  HEKY_CURRENT_USER\Environmnet:设置当前用户的TEMP和TMP环境变量到虚拟驱动器R

  Both HKCU Shell Folders:设置当前用户的Internet临时文件到虚拟驱动器R。

  HKY\.DEFAULT keys:设置默认用户的TEMP、TMP和Internet临时文件到虚拟驱动器R

  第四步:关机,然后重启动Windows2000即可。

  小提示

  当然微软提供的RAMDISK功能相对比较简单,目前网上还有一些更为强大的内存虚拟软件,比如RamDisk等。

  2.修改注册表发挥大内存优势

  现在请打开注册表编辑器,找到[HKEY_LOCAL_MACHINE\System\CurrentControlSet\ControlSession Manager\MomoryManagement],在右侧窗格修改一下键值(要注意的是,做一下设置的前提是内存最好超过512MB,并仅限于Windows 2000/XP)。

  (1)"LargeSystemCache"(启动大的系统缓存):在内存中开辟一块大的内存空间用于磁盘文件系统的预读取操作。当程序连续请求的数据增加时,Windows通过系统缓存自动预读,使程序能以最快速度获取所需数据。由于启用这个系统缓冲会占用较多的物理内存,使得能被程序利用的可用物理内存减少。将其值设为1。这样,系统缓存从4MB增加到8MB。

  (2)"SecondLevelDataCache"(提高CPU性能):CPU的处理速度要远远大于内存的存取速度,而内存又要比硬盘快得多。这样CPU与内存之间,内存与磁盘之间就形成了影响性能的瓶颈效应,前面的"LargeSystemCache"是为了缓解内存与磁盘瓶颈而设计的,而CPU为了能够迅速从内存获取处理数据也设置了一种缓冲机制L2 Cache(二级缓存)。调整这个键值能够使Windows更好地配合CPU利用该缓存机制获得更高的数据预读取命中率。建议将其设置为512

  (3)DisablePagingExecutive(禁用页面文件):将其值改为1(十六进制),这样将使所有程序和数据强制性限定在物理内存中运行,而不是使用虚拟内存。很明显,当有足够多的物理内存来完成所需任务时,这样做必使系统性能得到巨大的提升。对于内存仅有64MB的用户而言启用它或许就是灾难——系统频繁出错,直至崩溃。

  (4)"IOPageLockLimit"(定制输入/输出缓冲尺寸):输入输出系统是设备和微处理器之间传输数据的通道,当扩大其缓冲尺寸时数据传递将更为流畅。同理,具体设置多大的尺寸要视物理内存的大小和运行任务多少来决定,一般来说,如果内存有64MB就可将该双字节键的16进制值设置为400(1MB)、800(2MB)或1000(4MB)128MB内存可设为1000(4MB)、2000(8MB)或4000(16MB);256MB内存4000(16MB)或8000(32MB)。当然如果有更多内存,完全可以将其设为10000(64MB)甚至更多。当设为0时,Windows将自动配置。

  小提示

  据称,此设置还能够有效解决BT下载损伤磁盘的问题。

  3.Windows98/Me能用1GB内存吗?

  Windows98/Me不支持超过1GB以上的内存,同时,在内存超过128MB后,还需进行特别调整才能使系统更好地管理和使用内存,并避免出现大内存引发的系统故障。所有的关键设置都围绕Vcache(虚拟高速内存)。

  你知道吗?

  什么是Vcache?

  它是Windows为硬盘分配的、作为高速缓冲的物理内存,可以大大提高硬盘的读写速度,类似于DOS下的Smartdrv的用途。简单地说,Vcache 是Windows在物理内存中自动分配的一块空间,用来保存曾经使用过的,并且Windows认为还会被再次使用的代码和数据,这样当新的程序要求使用这些代码和数据时,就不必从硬盘中读取,而直接从内存中读取,这样速度会快出不少,从而大大提高系统性能。

  (1)128MB~512MB

  据专家介绍,如果内存为128MB~512MB,最好用"记事本"打开c:\windows\system.ini查找[Vcache]一节,找到以"MaxFilecache="开头的一行,并设置其值为物理内存的70%(由于这里使用的数值以KB为单位,需要使用MB*1024或Bytes/1024的公式来转换数据),比如:你的内存为128MB,那么就应该是128*0.7*1024=91750.4(约为91750KB),该语句应写为"MaxFileCache=91750"

  (2)512MB以上内存

  有些朋友会发现,当把内存增加到512MB以上后,启动Windows98/Me或打开DOS窗口时,系统会提示"内存不足"。

  这主要是因为Windows98/Me处理大于512MB内存时存在缺陷,因此最好将Vcache的MaxFileCache值制定为512MB(524,288KB),也就是"MaxFileCache=524288"。

  (3)1GB内存

  如果内存达到了1GB或更高,那么Windows98/Me会出现连续重启、死机或在使用Windows Update过程中不断重启的故障。

  要解决这个问题,同样是打开System.ini文件,在[386Ehh]字段添加"MaxPhysPage=40000"。这样,就可以限制Windows读取的内存控制在1GB以下。

  如果无法进入Windows,那么可在重启时一直按下Ctrl键直到出现启动菜单,接着选择"Command Prompt Only"项,在出现命令提示符后,输入"edit system.ini"并回车,接着在[386Ehh]字段添加"MaxPhysPage=40000"。

  4.关闭休眠

  很多用户喜欢休眠功能,这样可以实现快速开机功能,但对于大内存的电脑来说,在不经常读、写硬盘的情况下,最好是把硬盘休眠功能关闭,因为有时也会因此而造成无故死机故障。

  5.有大内存就可以不要虚拟内存了?

  经常看到不少文章介绍,再有了大内存后,就可以将虚拟内存禁用掉。其实不然!比如:Windows98/Me对大于512MB的内存有先天不足,大于这个数量的内存,Windows98会出现不稳定及启动速度变慢的情况。如果使用了大内存加上禁用虚拟内存,不稳定因素将会进一步增加。

  另外,Windows本身的设计是,一旦发现有进程转入不活动状态,就会把分配给它的内存空间映射到交换文件中,尽可能空出物理内存给其他活动的进程,并不是用完物理内存才开始动用交换文件。因为如果等到物理内存用完再调用,就已经太迟了。在配制较低的电脑上势必造成数据传输和处理停滞。所以禁止虚拟内存从原则上来讲,最易引起Windows异常,及时不出现运行不了的故障,也会频繁提示虚拟内存不够,请重新设置云云。

  你知道吗

  据华硕专家介绍,在使用INTEL 850/850E芯片组的主板时,如果搭配了2GB RAMBUS内存后,电脑会出现不稳定现象。这是由于Intel850/850E芯片组的限制,Intel的建议为:内存条数*每个内存上的晶片数≤24颗。而目前国内销售的RAMBUS 256内存的晶片数是8颗,Rambus512MB内存的晶片数就是16颗,所以当用户使用了过大的内存时都有可能出现不稳定现象。

  6.让大内存为硬盘助力

  如果你拥有了超过512MB的内存,并且还有一块迈拓或昆腾硬盘,那么Maxtor公司推出的MaxBoost值得一试,据称,它能大幅提升硬盘性能,最大可以提升约60%的硬盘性能。该软件其实是一块磁盘驱动,替换了Windows2000/XP的磁盘驱动,能针对不同应用软件自动在系统内存中设置一个适合大小的缓存,在读写数据前起到预读和缓冲作用,利用磁盘读写数据以一种不肯公布技术细节的"高级算法",从而有效的提升硬盘读写速度,达到提升应用程序和系统速度的目的。据一些专家介绍,该软件虽然没有官方宣称的那样神奇,但确实在文件复制等操作方面大显身手。当然由于MaxBoost还处于测试阶段,所以仍存在一些问题,所以建议普通玩家在该软件正式推出后再使用。

(0)

相关推荐

  • 剖析Windows用1G内存还慢的原因

    现在的内存基本达到了1元/MB的均价,不少朋友的电脑告别了可怜的64MB.128MB内存,256MB已经成为标准配制,512MB甚至1GB的内存也不再是"耸人听闻".但是有一件事情让很多朋友疑惑:"为什么使用1G内存我的Windows启动.软件运行速度还是这么慢?" 安装大容量内存后,系统.程序运行效率没有得到大幅度提高,这是因为系统本身运行机制限制了其管理和运用硬件资源的能力.所以纵然硬件资源非常丰厚,如果超出了Windows管理的范围,那么性能也不会得到明显提升

  • 深入剖析浏览器退出之后php还会继续执行么

    前提:这里说的是典型的lnmp结构,nginx+php-fpm的模式 如果我有个php程序执行地非常慢,甚至于在代码中sleep(),然后浏览器连接上服务的时候,会启动一个php-fpm进程,但是这个时候,如果浏览器关闭了,那么请问,这个时候服务端的这个php-fpm进程是否还会继续运行呢? 今天就是要解决这个问题. 最简单的实验 最简单的方法就是做实验,我们写一个程序:在sleep之前和之后都用file_put_contents来写入日志: <?php file_put_contents('/

  • 资料:引起内存不能“read”的原因及“written”的解决方案

    使用Windows操作系统的人有时会遇到这样的错误信息:"0X????????指令引用的0x00000000内存,该内存不能written",然后应用程序被关闭.如果去请教一些"高手",得到的回答往往是"Windows就是这样不稳定"之类的义愤和不屑.其实,这个错误并不一定是Windows不稳定造成的.本文就来简单分析这种错误的常见原因. 一.应用程序没有检查内存分配失败 程序需要一块内存用以保存数据时,就需要调用操作系统提供的"功能函

  • Java中关于内存泄漏出现的原因汇总及如何避免内存泄漏(超详细版)

    Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题.内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收.最近自己阅读了大量相关的文档资料,打算做个 总结 沉淀下来跟大家一起分享和学习,也给自己一个警示,以后 coding 时怎么避免这些情况,提高应用的体验和质量. 我会从 java 内存泄漏的基础知识开始,并通过具体例子来说明 Android 引起内存泄漏的各种原因,以

  • 当master down掉后,pt-heartbeat不断重试会导致内存缓慢增长的原因及解决办法

    最近同事反映,在使用pt-heartbeat监控主从复制延迟的过程中,如果master down掉了,则pt-heartbeat则会连接失败,但会不断重试. 重试本无可厚非,毕竟从使用者的角度来说,希望pt-heartbeat能不断重试,直到重新连接上数据库.但是,他们发现,不断的重试会带来内存的缓慢增长. 重现 环境: pt-heartbeat v2.2.19,MySQL社区版 v5.6.31,Perl v5.10.1,RHEL 6.7,内存500M 为了避免数据库启停对pt-heartbea

  • 深度剖析Java中的内存原型及工作原理

    本文主要通过分析Java内存分配的栈.堆以以及常量池详细的讲解了其的工作原理. 一.java虚拟机内存原型 寄存器:我们在程序中无法控制栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中堆:存放用new产生的数据静态域:存放在对象中用static定义的静态成员常量池:存放常量非RAM存储:硬盘等永久存储空间. 二.常量池(constant pool) 常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据.除了包含代码中所定义的各种基本类型(如int.

  • windows java.exe内存暴涨解决、idea跑java\ tomcat内存无限增长

    最近突然遇到个问题:用 idea 跑 Tomcat 服务,不到30分钟 内存就吃完了.用任务管理器查看,发现 java.exe占了10G内存!! 查了各种方法 一. idea Tomcat 配置 没用!!! 二.idea idea64.exe.vmoptions 安装目录下的 bin 下的 idea64.exe.vmoptions 配置,还是 C:\Users\Administrator\.IntelliJIdea2019.1\config 下的 idea64.exe.vmoptions 配置

  • IE8 内存泄露(内存一直增长 )的原因及解决办法

    最近开发的时候对页面使用了定时的局部更新,结果在ie6,7和Firefox下,一切正常,而在ie8下过上几个小时就浏览器就崩溃了,显示是内存溢出,我以为是代码写的不好导致内存泄露,但是ie6,7又正常,调查了一下,原来这是ie8的bug. 问题点 在IE8中,生成特定Dom节点所占用的内存是不会被释放的,即使这些节点被删除内存也不会被释放. 内存泄露的节点类型包括:form.button.input.select.textarea.a.img和objec 其他的大部分节点类型是不会泄露的,例如:

  • 详解SpringBoot注册Windows服务和启动报错的原因

    Windows系统启动Java程序会弹出黑窗口.黑窗口有几点不好.首先它不美观:其次容易误点导致程序关闭:但最让我匪夷所思的是:将鼠标光标选中黑窗口日志信息,程序竟然不会继续执行,日志也不会继续输出.从而导致页面一直处于请求状态.回车后程序才能正常执行.同时客户希望我们能部署在Windows系统上并且做到开机自动启动.针对以上需求将系统程序注册成Windows服务变得尤为重要. 针对于SpringBoot程序,目前主流的方法是采用winsw,简单方便.可是在开发过程中,针对不同的系统,启动服务可

  • Java 常见的几种内存溢出异常的原因及解决

    内存溢出的异常有很多,并且每种内存溢出都会有不同的异常信息和解决方式,下面会列出常见的几种内存溢出异常 堆内存溢出 java.lang.OutOfMemoryError: Java heap space 原因: 当堆内存不足,并且已经达到JVM设置的最大值,无法继续申请新的内存,存活的对象在堆内存中无法被回收,那么就会抛出该异常,表示堆内存溢出. 当一次从数据库查询大量数据,堆内存没有足够的内存可以存放大量的数据 大量的强引用对象在堆内存中存活,GC无法回收这些对象,新创建的对象在新生代无法进行

随机推荐