为您找到与内存溢出是什么原因相关的共200个结果:
内存溢出的原因是什么?出现额内存溢出又如何解决呢?下面读文网小编就为大家分享一下内存溢出的原因以及解决方法,欢迎大家参考和学习。
1.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
2.检查代码中是否有死循环或递归调用。
3.检查是否有大循环重复产生新对象实体。
4.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
5.检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
第四步,使用内存查看工具动态查看内存使用情况
浏览量:17
下载量:0
时间:
在有些时候我们的主板不支持大容量内存了,这是什么原因呢?那么下面就由读文网小编来给你们说说主板不支持大容量内存的原因分析吧,希望可以帮到你们哦!
一.内存芯片的逻辑BANK
主板上使用的32MB/64MB/128MB的内存条都是由若干内存芯片焊接在4层或6层电路板上组成的,因此首先必须对内存芯片的内部结构有个清楚的认识在芯片的内部,内存的数据是以位(bit)为单位写入一张大的矩阵中,每个单元我们称为CELL,只要指定一个行(Row),再指定一个列(Column),就可以准确地定位到某个CELL,这就是内存芯片寻址的基本原理。这个阵列就称为内存芯片的BANK,也称之为逻辑BANK(LogicalBANK)。
由于工艺上的原因,这个阵列不可能做得太大,所以一般内存芯片中都是将内存容量分成几个阵列来制造,也就是说存在内存芯片中存在多个逻辑BANK,随着芯片容量的不断增加,逻辑BANK数量也在不断增加,目前从32MB到1GB的芯片基本都是4个,只有早期的16Mbit和32Mbit的芯片采用的还是2个逻辑BANK的设计,譬如三星的两种16MB芯片:K4S161622D(512Kx16Bitx2BANK)和K4S160822DT(1Mx8Bitx2BANK)。
芯片组本身设计时在一个时钟周期内只允许对一个逻辑BANK进行操作(实际上芯片的位宽就是逻辑BANK的位宽),而不是芯片组对内存芯片内所有逻辑BANK同时操作。逻辑BANK的地址线是通用的,只要再有一个逻辑BANK编号加以区别就可以了(BANK0到BANK3)。但是这个芯片的位宽决定了一次能从它那里读出多少数据,并不是内存芯片里所有单元的数据一次全部能够读出。
DQ数据输入/输出线只有8根而不是32根,可以发现4个BANK是分时工作的,任一时刻只可能有一个BANK的数据被存取,0-3是它们的编号。每个逻辑BANK有8M个单元格(CELL),一些厂商(比如现代/三星)就把每个逻辑BANK的单元格数称为数据深度(DataDepth),每个单元由8bit组成,那么一个逻辑BANK的总容量就是64Mbit(8M8bit),4个逻辑BANK就是256Mbit,因此这颗芯片的总容量就是256Mbit(32MB)。
内存芯片的容量是一般以bit为单位的。比如说32Mbit的芯片,就是说它的容量是32Mb(b=bit=位),注意位(bit)与字节(Byte)区别,这个芯片换算成字节就是4MB(B=Byte=字节=8个bit),一般内存芯片厂家在芯片上是标明容量的,我们可以芯片上的标识知道,这个芯片有几个逻辑BANK,每个逻辑bank的位宽是多少,每个逻辑BANK内有多少单元格(CELL),比如目前目前64MB和128MB内存条常用的64Mbit的芯片就有如下三种结构形式:
①16Megx4(4Megx4x4banks)[16M?4]
②8Megx8(2Megx8x4banks)[8M?8]
③4Megx16(1Megx16x4banks)[4M?16]
表示方法是:每个逻辑BANK的单元格数逻辑BANK数量每个单元格的位数(芯片的位宽)。芯片逻辑BANK位宽目前的工艺水平只能最多做到16位,因此大家看到几乎所有的芯片逻辑BANK位宽只可能4/8/16三者之一。以前16Mbit的芯片基本采用的单个芯片两个逻辑BANK,但是到了64Mbit基本就都是4个逻辑BANK设计了,今后随着生产工艺水平的提高估计单个芯片8个甚至16个逻辑BANK的出现也不是没有可能。
二.内存条的物理BANK
通常主板上的每个内存插槽分为两段,这个大家从VIA主板BIOS设置中的BANK0/1DRAMTiming选项很容易推理得到,实际上也就是两个BANK,不过这里的BANK概念与我们前面分析芯片内部结构时提到的BANK可不一样。简单地说这个BANK就是内存和主板上的北桥芯片之间用来交换数据的通道。
目前以SDRAM系统为例,CPU与内存之间(就是CPU到DIMM槽)的接口位宽是64bit,也就意味着CPU一次会向内存发送或从内存读取64bit的数据,那么这一个64bit的数据集合就是一个内存条BANK,很多厂家的产品说明里称之为物理BANK(PhysicalBANK)。
目前绝大多数的芯片组都只能支持一根内存包含两个物理BANK,但是针对某个具体的条子,很多人想当然,认为每个DIMM插槽使用内存条的面数来区分占用几个BANK通道,单面的(16M,64M)只占用一个物理BANK,而双面的(32M,128M)则需占用两个物理BANK。实际上物理BANK与面数是无关的,PCB电路可以设计成双面和单面,也可把全部芯片(16颗)放在一面上(至少从理论上是完全可能)。
有些内存条单面就是一个物理BANK,但有些双面才是一个物理BANK,所以不能一概而论。前一阵闹得沸沸扬扬的大度256MB内存条就是一个典型的例子,虽然是双面并多达16枚芯片,但仍然是单个物理BANK的。要准确知道内存条实际物理BANK数量,我们只要要将单个芯片的逻辑BANK数量和位宽以及内存条上芯片个数搞清楚。各个芯片位宽之和为64就是单物理BANK,如果是128就是双物理BANK。目前的芯片组最多支持2个物理BANK。所以内存厂家生产的内存条都不可能超过2个物理BANK。
CPU一次只能对一个物理BANK进行访问和操作(因为一个物理BANK是64bit的位宽),那么内存条要保证一个周期内向数据总线提供或接收64bit的数据,而这些数据都是分别存储在内存条的的芯片中。那么内存条中有多个内存芯片,这64位数据到底是有一个芯片提供还是由所有芯片每个提供一部分呢?
以上面的那颗256Mbit的芯片为例,根据芯片组的工作原理,目前还没有那家芯片生产厂家做出位宽16位以上的芯片,所以现在的芯片组设计时都是要求内存条上每个芯片均承担提供数据的任务,也就是说内存条上的每个芯片都要要对这64位数据做贡献,而那颗内存芯片的位宽是8位,因此用这个芯片组成内存条只需要8颗芯片即完成了64位数据并发任务,算下来,内存条的容量就是32MB(256Mbit)8=256MB的容量。
假如是内存芯片的位宽是4位,那么需要的芯片数量必须是16颗,这时假如使用八颗位宽还是8位的64MB(512bit)芯片(单个芯片的总容量翻了一番)组装,尽管内存条上的总容量达到了256MB的要求,还是由于位宽不够是不能正常工作。要能工作就必须采用16位位宽的64MB(512bit)芯片。
看过“主板不支持大容量内存什么原因”
浏览量:2
下载量:0
时间:
在有些时候我们的内存分配失败,这是什么原因造成的呢?下面就由读文网小编来为你们简单的介绍内存分配失败的原因分析吧!希望能帮到你们哦!
程序需要一块内存用以保存数据时,就需要调用操作系统提供的功能函数来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是动态内存分配,内存地址也就是编程中的指针。
内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值0已不表示新启用的指针,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的健壮性。
若应用程序没有检查这个错误,它就会按照思维惯性认为这个值是给它分配的可用指针,继续在之后的运行中使用这块内存。真正的0地址内存区保存的是计算机系统中最重要的中断描述符表,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即死机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的写内存错误,并指出被引用的内存地址为0x00000000。
内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中安装的病毒程序),更改了大量的系统参数和系统文件之后。
附加内存分配方式:
内存分配方式有三种:
(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
2、常见的内存错误及其对策
发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。
常见的内存错误及其对策如下:
释放了内存却继续使用它。
有三种情况:
(1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。
(2)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。
(3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。
【规则1】用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。
【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。
【规则3】避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。
【规则4】动态内存的申请与释放必须配对,防止内存泄漏。
【规则5】用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”。
忘记了释放内存,造成内存泄露。
含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,你看不到错误。终有一次程序突然死掉,系统出现提示:内存耗尽。
动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理)。
内存分配未成功,却使用了它。
编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。
内存分配虽然成功,但是尚未初始化就引用它。
犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,导致引用初值错误(例如数组)。
内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。所以无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。
内存分配成功并且已经初始化,但操作越过了内存的边界。
例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for循环语句中,循环次数很容易搞错,导致数组操作越界。
浏览量:2
下载量:0
时间:
在有些时候我们的内存卡不能写入,这是怎么回事呢?下面就由读文网小编来为你们简单的介绍内存卡不能写入的原因分析吧,希望可以帮到你们哦!
内存卡不能写入的原因分析:
手机内存卡被写保护,成为只读状态,原因如下:
1、买到假卡了,寿命短,质量故障。
2、卡是真的,但质量不好。比如是山寨小厂的卡。
3、手机和卡有兼容性问题。这一点是经常见到的。电子产品,经常会有一些兼容性问题出现。这个可以尝试用读卡器重格解决。
4、手机长期处于过热状态,频繁读写,导致内存卡损坏。像出门旅游的时候,相机使用十分频繁,如果大量的照相,而相片设置在卡上,夏天天气热,手机频率高,就容易烧卡。像三星的note3一度被网友反馈说经常烧卡,就是主频高,卡的质量差等因素一起造成的。
这是内存卡变成只读状态了,可尝试以下方法解决:
1、用确保无问题的读卡器插到电脑上,修复磁盘,或重新格式化。
2、在windows的磁盘管理器中,删掉内存卡的分区,重建。
3、用专用工具Panasonic_SDFormatter格式化磁盘,如果还是提示禁止写入,那就是此卡彻底损坏。由于内存卡没主控,不能量产,只能换新卡或售后。
1.对于手机来说,并不是内存卡越大越好的,有时要看你手机支持多大的,还要看你的手机反映速度和你要干什么,有的手机运行内存小,安装大卡就是慢的不行,所以不要一眛的图大。
2.买卡,现在市场上1G的卡才30多!上面的标签还是金士顿什么的,其实全是的杂货,有的甚至是拿32M的卡充到1G的,但是去大的手机卖厂好像有的还是更那一样,拿假的骗你。
如果你真的有钱买金士顿1G,要100多的,原装更贵的!上淘宝买更杂,要看你的眼睛了。我建议找个大的店铺买杂卡就可以了,也能用的住,而且便宜。
3.别加密码。有的人为安全给内存卡加密,到时间长了,给忘了什么的,会直接导致手机不能读卡,到修手机的地方去解卡,花费你二三十!不要给自己找不必要的麻烦!其实忘了密码,有时用一款软件也是解开的,但是最好别加密!
4.格式化内存卡,格式化在手机上也就没有什么了,但是为了做好备份什么的,几乎在电脑上,有的朋友格式完后说手机不能读卡,其实是你没有选择格式化的格式,内存卡的格式是:选择《FAT16格式即FAT格式》!其实MP3也是!
5.换卡。有的朋友买了卡就要换了,可是软件什么的全在旧卡上,难道要重装?不的,把旧卡的资料全部在电脑上,之后移到新卡,但是拷贝内容时要把隐藏文件也全部选择上,隐藏文件也就是卡里的systems文件夹!怎么显示隐藏文件?有人问或许,打开我的电脑—工具—文件夹选项—查看—高级设置里就有了!
6.格式化卡!我们平常安装这安装那的,多了就会慢,于是就要格式化,这里就和换卡是一样的,先移动出卡内的文件,然后格式化,在拉进去...好了,是不感觉卡明显快多了呢!
7.整理内存卡!手机的内存卡永久了也就有点慢了,这时如果你不想用5的那个方法,也可以试一下下面这个方法。也就是用数据线或者用读卡器连接上电脑,然后碎片整理,这样也可以让你的手机感觉快了一点。
方法:打开我的电脑—右击内存卡的盘—属性—工具—碎片整理。
因为让手机慢的原因也不外乎两个原因:
(1)手机的运存不够;
(2)手机卡内的碎片太多了,手机调用文件太费力了。所以有时就整理一下碎片,不是说总是整理就是好的,听说经常整理也对卡有点伤害,这样还没有实践到。
8.最近总是听到有人说他的内存卡在手机里面读不出来,文件夹和文件在手机的文件管理总是用不了,前面有个问号。什么都打不开,可是还占着内存。
这个问题一般都出现在用数据线连接手机的时候出现的。
所以注意了,以后在拉什么东西如内存卡的时候,最好用读卡器!
如果你出现这个问题的时候,就用读卡器,然后在电脑上把内存卡文件夹的属性改一下,应该还可以用的,不然就用读卡器读的时候格式化内存卡!这样一般都没有什么问题了。
浏览量:2
下载量:0
时间:
有些时候我们的内存卡无法格式化,这是什么原因造成的呢?下面就由读文网小编来为你们简单的介绍内存卡无法格式化的原因及解决方法吧,希望你们喜欢!
内存卡无法格式化原因及解决方法:
不当操作或者中毒引起的,原文件系统被破坏,表现为无法打开.
1、是先要下载一个U盘芯片检测工具chipgenius绿色版,下载解压出来,就可以直接运行,然后在所显示所有硬件的信息上,点USB(U盘、内存卡),就可以在下方看到卡或U盘的芯片制造商或者芯片型号。
2、再从网上找到相对应的芯片U盘的量产工具下载,然后使用这个相应的工具,进行格式化,就可以把内存卡或U盘救回来了。比如搜索“安国群胜Alcoru量产工具”,一般先按制造商搜索到后下载就可以了。
或许有的朋友U盘或内存卡里有很多好东西,不想格式化后没了,那就先用软件将数据恢复了,再进行格式化即可。恢复数据的软件我是用ObjectRescue.Pro.v4.5.1.172破解版的(目前该软件最新为6.1英文版,版本可以通用)。
参考资料:
《重建分区表,修复无法格式化的U盘》
有些U盘在电脑上可以识别,但无法读写。利用Windows自带的格式化工具对其在格式化时,显示“文件系统是raw”,无法完成格式化。MFormat、PortFree等U盘修复工具,对它也无济于事。遇到这种故障,我们该怎么办呢?
首先,故障设备能够被系统识别,通常为软件故障,而软件故障通常可以利用一些工具软件来修复。一些用户给能被系统识别而无法格式化的U盘判了死刑,实在可惜。
我们知道,当硬盘的分区表损坏时,也无法完成格式化。遇到这种情况时,可以利用Windows自带的分区工具Fdisk,重建分区表。解决硬盘故障的这种思路同样可以用在U盘上,具体方法略有不同。
Step 1:将U盘插入电脑,开机。在“我的电脑”图标上点击鼠标右键,选择“管理”,出现“计算机管理”窗口。
Step 2:点击窗口左侧“存储”下的“磁盘管理”,屏幕出现当前系统中所有存储设备的信息。其中的“磁盘1(可移动)”,就是待修复的U盘。
Step 3:光标指向“磁盘1”,点击鼠标右键,选择“新建分区”,再选择“FAT32”或者“NTFS”,系统将提示分区创建成功。
Step 4:对U盘进行格式化。
通过上述步骤,U盘即可得以修复。
大功告成了!
浏览量:4
下载量:0
时间:
在有些时候不知道是怎么回事,我们的内存卡读不出来,这是怎么回事呢?下面就由读文网小编来为你们简单的介绍内存卡读不出的原因分析吧!希望你们喜欢!
内存卡读不出的原因分析:
1.中毒所造造成成手机内存卡读不出来,
解决办法:这种情况比较多的,中毒还会导致内存卡无法格式化的问题,一般是不好修复的。如果是中病毒造成 手机内存卡读不出来的情况,就要把内存卡格式化掉,(有时候会出现内存卡无法格式化和内存卡无法格式化失败的问题)一般能格式化的内存卡都能修复问题的。不能格式化的内存卡就不太好修复了,当然也可以借助内存卡修复软件来修复。如果里面有重要的数据那就得用数据恢复工具恢复里面地数据了,注意格式化后不要往内存卡里面写入数据,这样会造成恢复文件不完全的。
内存卡几乎每天都得使用,使用率非常高,当然出错或出毛病的时间也会很多。在平时使用内存卡的时候最容易出错的几点:1. 内存卡读不出来或不被识别的毛病 2. 在你急需存储资料的时候突然来个内存卡无法格式化让你懊恼不已。3:莫名的出现文件无法删除、文件变成乱码,(内存卡中病毒)让你非常的恼火……
2.手机卡坏掉或者接触不良造成手机内存卡读不出来。
解决办法:如果是接触不良这是很好解决的问题,将卡取出,用橡皮擦擦内存卡的金手指,去掉上面的氧化层,再放入手机试试。若还不行,把内存卡座里面的触角片撬高点,或者在内存卡后面涂一层胶水来增加其厚度就可以了。将卡插入读卡器(确定读卡是好的),再将读卡插到电脑上,看能否读出卡中数据。 若电脑能读卡,说明卡没问题,可能手机卡槽有问题,再找一张正常卡插入试试,若其他卡插入也读不出,则是手机卡槽坏了,请人维修一下。
下面是这些工具是来应付上面突如其来的这些莫名毛病的内存卡的,内存卡是我们使用频繁的存储工具,所以应该收藏这些比较实用的内存卡修复工具来为你排除内存卡的各种毛病会错误等待问题。
1.优秀的U盘、内存卡扩容检测工具MyDiskTest
MyDiskTest是一款U盘/SD卡/CF卡等移动存储产品扩容识别工具。可以非常方便的检测出各种存储产品是否经过扩充容量,或假冒内存以次充好。比如:512MB的内存卡变成1G(我曾经就上过当买2G卡回来监测发现是1G的)使用MyDiskTest可以很好的帮你识别这些问题,让你免受奸商的当。
MyDiskTest还可以检测FLASH闪存是否有坏块,是否采用黑片,(现在市场上很便宜的内存卡很多都是采用了黑片的,购买的时候需要注意)不破坏磁盘原有数据。 MyDiskTest的功能非常强大,可以测试你U盘、内存卡的读取和写入速度,对存储产品进行老化试验以及稳定性的测试。是你购买U盘和存储卡必备的工具。
MyDiskTest改进了快速扫描方式的算法,扫描结果更准确(速度是比原来稍慢)注意:测试中一定不要插拔被测设备,以免数据丢失!且测试过程中不响应其他设备的插拔动作。在检测前请自行备份U盘/SD卡内的文件资料,以防数据丢失。
2.方便的U盘启动盘制作工具UFormat
方便的制作U盘系统起动工具(之可以解决U盘出的有所问题)!请下载一个UFormat(这是一个制做U盘系统起动工具)。解压UFormat这个U盘系统起动工具 开打后有一项------(点击)引导处理-----(点击)开始------(到<我的电脑>弹出U盘)--然后拆开U盘,再插上U盘--最后是用xp的格试化格一下在FAT32和NTFS winxp sp2测试成功! 我发现使用:USBoot更好。
3.U盘专业烧录修复(U盘低级格式化)工具汉化版PortFree Production Program
PortFree Production Program,又名星梭U盘低级格式化工具,是一款 U 盘修复程序,低级格式化可以修复内存卡、 U 盘的一些错误,其实不然,在使用这个工具进行U 盘进行修复的时候,U 盘里如果有重要资料的话,还是要先备份好资料,这也是常识,以免操作失误或不当造成不可挽回的错误而引起不可避免的损失。
警告:U 盘有价,数据无价,还请你操作需谨慎!
4. MMC卡格式化工具MMC Medic
MMC Medic 一款MMC卡格式化工具,如果你MMC卡设置了密码,且自己又忘记了所设密码,或者是一些什其他的的原因,导致内存卡格式化不了的问题,这个时候用这个工具就派上用场啦!它可以为你很方便解决这些问题这个问题。
5.U盘格式化修复工具Mformat
Mformat 时一款小巧的U盘格式化工具。当你的MP3、U盘等移动存储设备遇到无法读取时,你就可以把这个小工具拿了试试。这是一款十分不错的U盘修复工具.可以修复很多问题,比如说:U盘能检测到,但无法读取数据,或无法访问,变成了0字节,还可以修复容量变小了的问题……注意:使用前请备份好你的资料。
6.一个免费的文件恢复工具Recuva
Recuva是一个免费的的文件恢复工具,你可以使用它来恢复那些被误删除的的文件,能直接恢复硬盘、闪盘、存储卡(如 SD 卡,MMC 卡等等)中的文件,只要没有被重复写入数据,(重复写入数据后是没有办法恢复的无论你使用什么工具)Recuva对于格式化或是删除得文件均可直接恢复,支持 FAT12,FAT16,FAT32,NTFS 文件系统。Recuva搜索被删除文件的速度很快,选择好要扫描的驱动器后点击扫描按钮即可。
Recuva可以简单方便的恢复你宝贵的资料,有Recuva在手你一切都不用怕,随便你怎么误删除文件。当然恢复数据的不光只有Recuva还有很多非常强大而且很出名的数据恢复工具,比如:asyRecovery 易我数据恢复等等都可以恢复数据。
7.U盘病毒专杀工具USBCleaner,如今的U盘病毒(特别是木马程序会盗窃你的照耀文件)是日益猖獗,U盘一旦中毒就会无法使用,导致重要文件丢失等等问题,其危害不容小视,不但计算机中要安装防盘病毒软件而且还要有专门的U盘杀毒工具来防止U盘病毒的传染。
下面这个小工具就是非常好的U盘病毒防护、查杀工具;“USBCleaner”,USBCleaner可以为你的U盘安全护航,很方便的查杀你U盘所携带的各种病毒
浏览量:4
下载量:0
时间:
在有些时候我们的手机内存不足,这是什么原因造成的呢?下面就由读文网小编来为你们简单的介绍手机内存不足原因分析吧,希望可以帮到你们哦!
1、短信垃圾
可能一条短信不会占很大的空间,但是短信除了文字外,还会带有图片、声音等信息。你要是长时间不去清理,累计起来占用的内存还是很多的。
定期删掉一些垃圾短信很有必要,删短信时也要注意重要的短信别误删。
2、图片视频
对于爱自拍的美女们来说,长年累月手机里的图片没有上千张,也有上百种。但因为照片的像素高,所以占用的空间也会更大。
可以将一些图片视频同步到云端,这样既可以节省空间,又可以防止图片视频丢失。
3、应用缓存
在使用应用的过程中都会带有缓存,一般来说,有了缓存数据后,打开App时能节省流量。但时间越久缓存会越多,占据的空间也越来越多。
应用一般不会自动清理缓存,所以需要靠我们手动去删除。安卓手机可前往管理应用程序项中,找到相应的应用,直接清除缓存即可。
安卓手机卸载应用后,还会存有一些数据包无法手动删除,这就需要借助360、手机管家等清理工具来清理。
而iPhone用户直接打开设置——通用——用量——管理储存空间,选择占空间多的App来删除缓存数据即可。
4、浏览器缓存数据
平时我们喜欢用手机浏览器搜索问题,或者看视频,但这样其实浏览器上缓存大量的内容,长时间不清理,绝对让手机卡成翔。
在推出浏览器知趣,别忘了清除历史记录与网站数据哦!
5、手机本身
不少人会注意到,每隔一段时间手机系统会提示升级,但每次升级你会发现内存会少很多。要想解决这个问题,只能刷机。
有需要刷机的朋友,别忘了刷机前,先备份好必要的东西。
浏览量:4
下载量:0
时间:
可能还有很多网友不知道内存损坏的原因有哪些,那么下面就由读文网小编来给你们说说内存损坏的原因吧,希望可以帮到你们哦!
造成内存卡损坏的原因:
1内存卡使用一段时间后可能会出现氧化,导致接触不良。可以先用橡皮擦或酒精擦拭掉表面的氧化层。
2.如果是不小心中了病毒,可以将内存卡插入手机中,先进行杀毒,再看看能不能打开内存卡。
3.在使用内存卡下载时,没有安全删除就拔掉内存卡,强行拔掉了内存卡,也就是热插拔,所以造成内存卡内部数据出错。 4.内存卡出现变形弯曲。
5.内存卡工作的时间太长,没有得到“休息”。 6.使用内存卡时中途出现断电 7.内存卡的内存芯片烧毁了。
如果确定内存卡是好的,但是将内存卡连接到电脑上还是无法读取,那就有可能是以下这些原因了。
第一种:数据线损坏
原因:如果是使用数据线将内存卡与电脑连接,那么如果数据线是坏的,那么电脑自然就无法对内存卡进行识别和读取了。
解决办法:更换数据线或者直接使用读卡器进行连接 第二种:USB接口有问题
原因:如果电脑接口有松动或损坏的问题,也可能导致内存卡无法读取。因为USB接口是内存卡与电脑之间的连接点。
解决方法:更换电脑上的其他USB接口,试试是不是电脑接口的问题
第三种:读卡器的问题
原因: 如果采用读卡器使内存卡与电脑连接,如果读卡器有损坏,自然电脑无法读取内存卡。
解决方法:更换一个读卡器重新读取或者用数据线连接。 第四种:电脑不支持内存卡格式
原因:电脑的操作系统不同,它的硬件能够识别格式就不同。
解决办法:在内存卡连接电脑的时候,检查电脑系统是否支持内存卡的格式,如果不支持的话,当然也就没办法读取了。换个电脑测试一下。
第五种:没安装读取软件
原因:智能手机在使用数据线和电脑连接的时候,电脑上不会显示可移动磁盘。
解决办法:在将内存卡与电脑连接前,应该先安装处理软件或者驱动程序,安装后就能读取内存卡了。
第六种:电脑硬件损坏
原因:如果电脑硬件有问题,那连接到电脑的内存卡也就无法读取了。
解决办法:仔细排查出电脑硬件出现故障的地方和原因。也可以再换一台电脑,对内存卡进行读取。
第七种:内存卡被加密
原因:现在部分手机支持加密内存卡,加密后的内存卡连接到电脑上是无法读取的。 解决办法:可以先将其解密,然后再将内存卡连接到电脑上进行读取。
方法一,针对逻辑问题导致的数据丢失 当内存卡发生数据丢失的时候,假如只是软件问题或者是误操作导致的,那么只需要下
载顶尖数据恢复软件进行数据恢复就可以了,顶尖数据恢复的界面简洁,操作简单,只要用户在发生数据恢复后,不要在内存卡中写入新的数据,就一定可以完美的恢复丢失的数据。
方法二,针对内存卡硬件受损
应该及时送到专业的数据恢复中心,切不要对储存卡进行更多的操作,应该用白密封的白胶带先将内存卡封好,等数据恢复工程师帮您处理。
五 如何延长内存卡使用寿命 如果是内存卡的硬件受到损坏,而导致的数据丢失,那么小编建议用户将内存卡送到专业的数据恢复机构,让专业的技术人员帮您恢复数据,避免自己盲目的操作而导致数据无法恢复。
1.要尽可能的轻放轻拿,不要重压和不要弯曲内存卡,不要让内存卡掉落或撞击,平时不要经常拆卸内存卡。
2不要在高温和潮湿的环境中使用内存卡,暂时不需要用的内存卡,应该装入塑料口袋中或放入包装盒。
3注意避免静电以及磁场的环境,比如音箱、发动机、电视机等。还要预防静电,原理液体和腐蚀性材料等。
4 在运行内存卡进行数据保存、删除、格式化以及回放的过程中,一定不要突然拔掉或突然停电。
5 如果要将内存卡从设备中取出或插入使,一定要先关闭设备的电源,不能够通电进行操作,因为如果不关闭电源可能会产生脉冲电势而损坏内存卡。
6使用内存卡时最好将内存卡装到接近满时再进行删除,千万不要存入一点文件就删除一点文件。
7 在使用内存卡时,也不要把内存卡完全装满,一定要尽量预留出一点空间。尤其不能在已经快要装满的情况下,还继续强行的存储数据。而对于相机的内存卡,也不要在相机或者是内存卡速度不支持的情况下进行连拍,如果强行连拍,可能会破坏引导区目录,造成内存卡硬件永久性损坏。
8 避免内存卡受到病毒的入侵,病毒不仅会损坏文件,而且会缩短内存卡的使用寿命。 这是因为不管是病毒的繁殖过程还是利用杀毒软件对内存卡进行杀毒,都是一个多次反复写入的过程,这必然会对内存卡造成损坏。
9 不要在不符合规范的数码设备上使用内存卡,由此造成的格式化损坏可能会无法恢复。 10 如果出现内存的数据或部分照片无法打开的情况,应先将可以打开的照片和数据备份起来,然后不要写入新的数据或者进行格式化操作。应该要更换另一个读卡器进行读取,最好如果还是无法打开,就要删除,不要让这些数据保留在内存卡上。
浏览量:3
下载量:0
时间:
Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。下面是读文网小编带来的关于java内存溢出如何产生的内容,欢迎阅读!
java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下:
其中方法区和堆是由所有线程共享的数据区。
Java虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区。
Java官方定义: http://www.98ki.com/servlet/HomeServlet?method=get&id=53
Java各内存区域分析: http://www.98ki.com/servlet/HomeServlet?method=get&id=43
通过分析各个区域的内容我们分别写出各个区域的内存溢出实例
堆溢出
由Java的官方文档我们可以看出,Java堆中存放:对象、数组。下面以不断创建对象为例:
Exception in thread "main"java.lang.OutOfMemoryError: Java heap space
public class HeapLeak {
public static void main(String[] args){
ArrayList list = new ArrayList ();
while ( true ){
list.add( new HeapLeak.method()) ;
}
}
static class method{
}
}
栈溢出
从Java官方API中我们知道,栈中存储:基本数据类型,对象引用,方法等。下面以无限递归创建方法和申请栈空间为例,分别演示栈的stackOverflow和OutOfMemory
l Exception in thread "main" java.lang.StackOverflowError
package Memory;
public class StackLeak {
public static void main(String[] args){
method ();
}
public static void method (){
method ();
}
}
l Exception in thread "main"java.lang.OutOfMemoryError: unable to create new native thread
package Memory;
public class StackOutOfMemory {
public static int count = 1;
public void noStop() {
while ( true ) {
}
}
public void newThread() {
while ( true ) {
Thread t = new Thread( new Runnable() {
public void run() {
System. out .println( " 已创建第 " + count +++ " 个线程 " );
noStop();
}
});
t.start();
}
}
public static void main(String[] args){
new StackOutOfMemory().newThread();
}
}
Java hotspot虚拟机中一个线程占用内存可通过-Xss设置,而能创建的线程数计算方法为:
可创建线程数=(物理内存-Os预留内存-堆内存-方法区内存)/单个线程大小
在测试的时候这里还有点小插曲,电脑强关了一次,因为把-Xss设置成了2M,内存使用增加到97%左右,操作系统死了,这个进程不断在创建线程,但是并没有因为内存不足而停下来,直到电脑完全死掉也没有报出错误信息。最后分析是因为电脑空闲内存还有600M,在线程还没有创建完的时候,已经开启的线程太多,在死之前大概能开到200多个,对内存大量消耗,造成系统挂掉。
这里又出现一个有趣的现象,当线程顺序创建到第88个的时候,count跳了很多,并且开始无序,有兴趣的可以深入学习一下线程方面的问题,我也会在后面的博客分析这个问题。
而换成200M的时候,创建第二个线程的时候就报了OutOfMemory.不管Xss设置多少,报错之后,程序都会一直走下去,执行已开线程中的任务。
常量池溢出
从Java官方API中我们知道,常量区代表运行时每个class文件中的常量表。它包括几种常量:编译期的数字常量、方法或者域的引用(在运行时解析)。runtime constant pool的功能类似于传统编程语言的符号表,尽管它包含的数据比典型的符号表要丰富的多。
下面以不断添加Stirng为例:
Exception in thread "main"java.lang.OutOfMemoryError: PermGen space
常量池在方法区中,首先设置持久代大小,使其不可扩展。
然后需要做的就不停地往方法区中加字符串。其中intern()就是查看方法区中有没有这个字符串,没有的话就加进去,如果这里不用intern(),字符串是存在堆里的,会报heapOutOfMemory.
这里需要注意的是,在 HotSpot 中,方法区是在堆的持久代中的。
package Memory;
import java.util.ArrayList;
public class ConstantPoolLeak {
public static void main(String[] args) {
int count = 0;
ArrayList list = new ArrayList ();
while ( true )
list.add(String. valueOf (count++).intern()) ;
}
}
方法区溢出
从Java官方API中我们知道,方法区存放每个Class的结构,比如说运行时常量池、域、方法数据、方法体、构造函数、包括类中的专用方法、实例初始化、接口初始化。
Java的反射和动态代理可以动态产生Class,另外第三方的CGLIB可以直接操作字节码,也可以动态产生Class,下面通过CGLIB来演示。
import java.lang.reflect.Method;
public class MethodAreaLeak {
public static void main(String[] args){
while ( true ){
Enhancer enhancer = new Enhancer ();
enhancer.setSuperClass(OOMObject. class );
enhancer.setUseCache( false );
enhancer.setCallback( new MethodInterceptor (){
public Object intercept(Object obj, Method method,Object[] args,
MethodProxy proxy) throws Throwable{
return proxy.invokeSuper(obj, args);
}
});
enhancer.create();
}
}
class OOMObject{
}
}
本机直接内存溢出
Java虚拟机可以通过参数-XX:MaxDirectMemorySize设定本机直接内存可用大小,如果不指定,则默认与java堆内存大小相同。JDK中可以通过反射获取Unsafe类(Unsafe的getUnsafe()方法只有启动类加载器Bootstrap才能返回实例)直接操作本机直接内存。通过使用-XX:MaxDirectMemorySize=10M,限制最大可使用的本机直接内存大小为10MB,例子代码如下
package Memory;
import java.lang.reflect.Field;
public class DirectMemoryOOM {
private static final int _1MB = 1024 * 1024 * 1024;
public static void main(String[] args) throws Exception {
Field unsafeField = Unsafe . class .getDeclaredFields()[0];
unsafeField.setAccessible( true );
Unsafe unsafe = ( Unsafe ) unsafeField.get( null );
while ( true ) {
// unsafe 直接想操作系统申请内存
unsafe.allocateMemory( _1MB );
}
}
}
相关阅读推荐:
浏览量:2
下载量:0
时间:
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。下面是读文网小编带来的关于java项目内存溢出怎么解决的内容,欢迎阅读!
原因 :内存容易溢出可以说是因为在程序中有内存泄漏(memory leak)的问题,容易引起内存溢出的直接原因可以归结为代码质量问题,在内存中存在大量的对象,垃圾回收器不能回收,随着程序的不断运行,程序会创造更多的对象,这些对象之间存在一定的内联关系,所以不容易造成被java垃圾回收器回收。
以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理。
一、java.lang.OutOfMemoryError: PermGen space PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,
这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小
超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128M"
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。
二、java.lang.OutOfMemoryError: Java heap space
#p#副标题#e#
浏览量:3
下载量:0
时间:
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。下面是读文网小编带来的关于java 内存溢出怎么解决的内容,欢迎阅读!
一、内存溢出类型
1、java.lang.OutOfMemoryError: PermGen space
JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在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(Garbage Collection),而且时间很长,大约需要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 Of Memory Error 的状况,这时就大概要计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。
浏览量:2
下载量:0
时间:
对于虚拟内存不足是什么原因或许不少人都是不知道,那么虚拟内存不足是什么原因造成的呢?现在读文网小编就来跟大家说说这个虚拟内存不足是什么原因。
虚拟内存使用一般是在物理内存不足的情况下启用的。但是有用户反映老是弹出虚拟内存不足,那么这个虚拟内存不足是什么原因?
1、 可能感染病毒造成虚拟内存不足。
如果电脑感染了病毒,那么病毒会占用大量内存空间,从而导致内存不足情况。这时就需要时常给电脑体检下了。
2、 可能虚拟内存设置不当造成虚拟内存不足。
很多时候,如果虚拟内存设置不当的话也是会造成内存不足情况。通常给虚拟内存设置大小是物理内存大小的1.5~2倍。假如设置太小的话,那么肯定会影响系统程序的正常运行的。此时就需要重新调整虚拟内存大小了。详细可查看:win7虚拟内存怎么设置最好_win7虚拟内存设置 。
在系统盘里面是有一个虚拟内存文件的,在XP系统里面的虚拟内存文件名是“pagefile.sys”。假如大家的系统盘剩余空间不多了,那么就会导致这个虚拟内存不足,同时也会出现虚拟内存不足情况。大家最好是给系统盘保留300MB左右剩余空间,当然这个也是根据实际需求来定。或者大家可以适当把一些程序转移到非系统盘里面。
3、 由于SYSTEM用户权限设置不当造成虚拟内存不足。
这个基于NT内核的Windows系统启动时,那么SYSTEM用户会为系统创建虚拟内存文件。不过有些用户为了系统的安全,采用的是NTFS文件系统,但却取消了这个SYSTEM用户在系统盘“写入”和“修改”的权限,那么这样就无法为系统创建虚拟内存文件,如果运行大型程序时,这时就会出现内存不足的问题。其实问题很好解决,大家只要重新赋予SYSTEM用户“写入”和“修改”的权限即可,但是这个仅限于使用NTFS文件系统的用户。
看过“ 虚拟内存不足是什么原因 ”
浏览量:2
下载量:0
时间:
内存不足是什么原因,这个问题要分析的原因很多,我们知道在日常生活中,我们会因为很多原因而导致内存不足,那具体是什么原因你们知道吗?下面就由读文网小编来告诉你们吧!
内存不足是什么原因
一、剪贴板占用了太多的内存
实际上,剪贴板是内存中的一块临时区域,当你在程序中使用了“复制”或“剪切”命令后,Windows将把复制或剪切的内容及其格式等信息暂时存储在剪贴板上,以供“粘贴”使用。如果当前剪贴板中存放的是一幅图画,则剪贴板就占用了不少的内存。这时,请按下述步骤清除剪贴板中的内容,释放其占用的内存资源:
1.单击“开始”,指向“程序”或“所有程序”,指向“附件”,指向“系统工具”,然后单击“剪贴板查看程序”,打开“剪贴板查看程序”窗口。2.在“编辑”菜单上,单击“删除”命令。3.关闭“剪贴板查看程序”窗口。
为了与Microsoft Office程序提供的多重剪贴板相区分,上述所说的剪贴板,常被我们称为系统剪贴板。如果你正在使用Microsoft Office程序,而且使用了其多重剪贴板功能,那么你应清空“Office剪贴板”上的项目,方法是:在“Office剪贴板”任务窗格(OfficeXP)或工具栏(Office2000)上,单击“全部清空”或“清空‘剪贴板’”。当清空“Office剪贴板”时,系统剪贴板也将同时被清空
二、打开的程序太多
如果同时打开的文档过多或者运行的程序过多,就没有足够的内存运行其他程序。这时,对于多文档界面(MDl)程序,如Wd、Excel等,请关闭当前文档外的所有文档,并退出当前未使用的程序,然后或许你就能够继续执行因“内存不足”而被中断的任务。
三、重新启动计算机
如果只退出程序,并不重新启动计算机,程序可能无法将内存资源归还给系统。请重新启动计算机以释放系统资源,然后再次运行程序或执行被中断的任务。
四、自动运行的程序太多
如果在启动Windows时自动运行的程序太多,那么,即使重新启动计算机,也没足够的内存用来运行其它程序。
(一)确定设置为自动运行的程序是否太多
1.单击“开始”,然后单击“运行”。
2.在“打开”框中,键入“Msconfig”,单击“确定”按钮,打开“系统配置实用程序”窗口。
3.单击“常规”选项卡,选中“选择性启动”复选钮,清除“处理Win.ini文件”复选框和“加载启动组项目”复选框。
4.单击“确定”按钮,当系统提示重新启动计算机时,请单击“是”按钮。
重新启动电脑后,如果内存不足的问题已经解决,你就可以将计算机配置为启动时不打开任何程序。
(二)配置计算机不自动打开任何程序
1.恢复在Msconfig中所作的更改,方法是:在“系统配置实用程序”窗口,单击“常规”选项卡,选择“正常启动”,单击“确定”按钮,然后重新启动计算机。
2.删除“启动”文件夹中的所有快捷方式
①单击“开始”,指向“设置”,然后单击“任务栏和开始菜单”,系统弹出“任务栏属性”对话框。
②单击“开始菜单”选项卡,单击“自定义”,再单击“删除”按钮。
③单击“启动”文件夹旁的加号,以显示设置为自动运行的程序列表。如果“启动”文件夹旁没有加号“+”,则表明没有设置为自动运行的程序,请单击“关闭”按钮以终止此过程。
④单击“启动”文件夹中的每个快捷方式,然后单击“删除”按钮。此操作将从“开始”菜单中删除快捷方式,但并不从硬盘中删除相应的程序。对于“启动”文件夹中的每个快捷方式,重复该步骤。
⑤单击“关闭”按钮。
⑥单击“确定”按钮。
3.禁用从Win.ini文件加载的所有程序
①如上所述打开“系统配置实用程序”窗口。
②单击“Win.ini”选项卡,双击“[windows]”,然后清除“Load=”和“Run=”复选框。
③单击“确定”按钮,当系统提示重新启动计算机时,请单击“是”按钮。
五、让Windows管理虚拟内存设置
如果没有设置让Windows管理虚拟内存或者禁用虚拟内存,那么计算机可能无法正常工作,也可能收到“内存不足”的消息,或在运行某程序时出现相同的错误消息。
1.单击“开始”,单击“设置”,单击“控制面板”,然后双击“系统”。
2.在“系统属性”对话框中,单击“性能”选项卡,然后单击“虚拟内存”按钮。
3.选中“让Windows管理虚拟内存设置―(推荐)”选项,将计算机中可作为虚拟内存使用的硬盘空间量设置为默认值。此时,虚拟内存分页“win386.swp”能够根据实际内存的使用情况动态缩小和放大,最小容量为0,最大容量为硬盘的全部可用空间。
4.单击“确定”按钮。
金士顿DDR3 1333 4GB
六、增加可用磁盘空间
由于Windows以虚拟内存分页文件的格式使用硬盘空间以模拟RAM(),所以,尽管已设置为让Windows管理虚拟内存,但是当虚拟内存分页文件所在的驱动器(默认为Windows系统所在的硬盘分区)没有足够的空间时,仍会出现“内存不足”的错误。此时,请执行以下一项或多项操作,增加Windows虚拟内存分页文件所在驱动器上的可用空间:
1.清空回收站,方法是:在桌面上,右键单击“回收站”,再单击“清空回收站”。
2.从磁盘中删除临时文件,方法是:打开“Windows资源管理器”或“我的电脑”窗口,右键单击要释放其空间的磁盘,然后单击“属性”,在“常规”选项卡上,单击“磁盘清理”按钮,选中要删除的不需要的文件前的复选框(如图3),可以阅读列表下面区域中每个文件类型的说明,单击“确定”按钮。
3.从磁盘中删除过期的文件或已存档的文件。
4.删除从未使用过的所有文件。
七、程序文件被毁坏
如果仅仅是使用某个程序时,系统提示内存不足,而其他程序可以正常运行,那么可能的原因是该程序文件被毁坏,从而导致内存问题。然而Windows并没有确切地提示表明该程序已损坏,所以请尝试删除并重新安装该程序,然后重新运行该程序。如果系统不再提示内存不足,那么说明原程序文件确实被损坏。
八、使用内存优化软件
内存优化软件有很多,比如RAM Idle和Memo Kit就是比较出色的两个。这些软件都可以设置自动清空剪贴板、释放被关闭程序未释放的内存、对Win386.swp文件进行重新组织等,从而免除你手工操作的麻烦,达到自动释放内存的目的,不妨一试!
九、查杀病毒
系统感染电脑病毒也是导致内存不足的罪魁祸首,当系统出现“内存不足”的错误时,请使用最新的防毒软件查杀病毒,或者在清除电脑病毒之后,就解决了“内存不足”的问题。
浏览量:2
下载量:0
时间:
内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题。内存溢出与锁表则不然,一般现象是操作一般时间后系统越来越慢,直到死机,但并不能明确是在什么操作上出现的,发生的时间点也没有规律,查看日志或查看数据库也不能定位出问题的代码。下面就由读文网小编为大家整理的溢出问题解决方法,供大家参考!
内存溢出虽然很棘手,但也有相应的解决办法,可以按照从易到难,一步步的解决。
第一步,就是修改JVM启动参数,直接增加内存。这一点看上去似乎很简单,但很容易被忽略。JVM默认可以使用的内存为64M,Tomcat默认可以使用的内存为128MB,对于稍复杂一点的系统就会不够用。在某项目中,就因为启动参数使用的默认值,经常报“OutOfMemory”错误。因此,-Xms,-Xmx参数一定不要忘记加。
第二步,检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误。在一个项目中,使用两个数据库连接,其中专用于发送短信的数据库连接使用DBCP连接池管理,用户为不将短信发出,有意将数据库连接用户名改错,使得日志中有许多数据库连接异常的日志,一段时间后,就出现“OutOfMemory”错误。经分析,这是由于DBCP连接池BUG引起的,数据库连接不上后,没有将连接释放,最终使得DBCP报“OutOfMemory”错误。经过修改正确数据库连接参数后,就没有再出现内存溢出的错误。
查看日志对于分析内存溢出是非常重要的,通过仔细查看日志,分析内存溢出前做过哪些操作,可以大致定位有问题的模块。
第三步,安排有经验的编程人员对代码进行走查和分析,找出可能发生内存溢出的位置。重点排查以下几点:
l 检查代码中是否有死循环或递归调用。
l 检查是否有大循环重复产生新对象实体。
l 检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
l 检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
第四步,使用内存查看工具动态查看内存使用情况。某个项目上线后,每次系统启动两天后,就会出现内存溢出的错误。这种情况一般是代码中出现了缓慢的内存泄漏,用上面三个步骤解决不了,这就需要使用内存查看工具了。
内存查看工具有许多,比较有名的有:Optimizeit Profiler、JProbe Profiler、JinSight和Java1.5的Jconsole等。它们的基本工作原理大同小异,都是监测Java程序运行时所有对象的申请、释放等动作,将内存管理的所有信息进行统计、分析、可视化。开发人员可以根据这些信息判断程序是否有内存泄漏问题。一般来说,一个正常的系统在其启动完成后其内存的占用量是基本稳定的,而不应该是无限制的增长的。持续地观察系统运行时使用的内存的大小,可以看到在内存使用监控窗口中是基本规则的锯齿形的图线,如果内存的大小持续地增长,则说明系统存在内存泄漏问题。通过间隔一段时间取一次内存快照,然后对内存快照中对象的使用与引用等信息进行比对与分析,可以找出是哪个类的对象在泄漏。
通过以上四个步骤的分析与处理,基本能处理内存溢出的问题。当然,在这些过程中也需要相当的经验与敏感度,需要在实际的开发与调试过程中不断积累。
浏览量:2
下载量:0
时间:
脑常提示提示内存不足,怎么办,有人说可以更换更大容量的内存条,或者直接加内存条,但是这样是要花费银子的,除了花钱外,到底还有没有不用花钱的解决办法呢?答案是肯定的。下面就让读文网小编为大家介绍一下具体的解决方法吧,欢迎大家参考和学习。
电脑内存不足的原因及解决方法:
如果没有设置让Windows管理虚拟内存或者禁用虚拟内存,那么计算机可能无法正常工作,也可能收到“内存不足”的消息,或在运行某程序时出现相同的错误消息。
1.单击“开始”,单击“设置”,单击“控制面板”,然后双击“系统”。
2.在“系统属性”对话框中,单击“性能”选项卡,然后单击“虚拟内存”按钮。
3.选中“让Windows管理虚拟内存设置—(推荐)”选项,将计算机中可作为虚拟内存使用的硬盘空间量设置为默认值。此时,虚拟内存分页“win386.swp”能够根据实际内存的使用情况动态缩小和放大,最小容量为0,最大容量为硬盘的全部可用空间。
4.单击“确定”按钮。
浏览量:5
下载量:0
时间:
随着内存价格的下调,不少网友都为自己的机器配置了高容量内存,增大内存容量不但可以提高读写速度,而且会适当的提高系统性能;但是,单条大容量内存在一些主板上(时间比较长的主板)不是无法识别,就是识别错误(容量识别错误)。具体是什么原因造成的呢?下面读文网小编就为大家介绍一下具体的原因分析吧,欢迎大家参考和学习。
通常主板上的每个内存插槽分为两段,这个大家从VIA主板BIOS设置中的BANK 0/1 DRAM Timing选项很容易推理得到,实际上也就是两个BANK,不过这里的BANK概念与我们前面分析芯片内部结构时提到的BANK可不一样。简单地说这个BANK就是内存和主板上的北桥芯片之间用来交换数据的通道。
目前以SDRAM系统为例,CPU与内存之间(就是CPU到DIMM槽)的接口位宽是64bit,也就意味着CPU一次会向内存发送或从内存读取64bit的数据,那么这一个64bit的数据集合就是一个内存条BANK,很多厂家的产品说明里称之为物理BANK(Physical BANK),目前绝大多数的芯片组都只能支持一根内存包含两个物理BANK,但是针对某个具体的条子,很多人想当然,认为每个DIMM插槽使用内存条的面数来区分占用几个BANK通道,单面的(16M,64M)只占用一个物理BANK,而双面的(32M,128M)则需占用两个物理BANK。
实际上物理BANK与面数是无关的,PCB电路可以设计成双面和单面,也可把全部芯片(16颗)放在一面上(至少从理论上是完全可能)。有些内存条单面就是一个物理BANK,但有些双面才是一个物理BANK,所以不能一概而论。前一阵闹得沸沸扬扬的大度256MB内存条就是一个典型的例子,虽然是双面并多达16枚芯片,但仍然是单个物理BANK的。
要准确知道内存条实际物理BANK数量,我们只要要将单个芯片的逻辑BANK数量和位宽以及内存条上芯片个数搞清楚。各个芯片位宽之和为64就是单物理BANK,如果是128就是双物理BANK。目前的芯片组最多支持2个物理BANK。所以内存厂家生产的内存条都不可能超过2个物理BANK。
浏览量:2
下载量:0
时间:
笔记本电脑物理内存高是什么原因?很多用户都会遇见这样的问题,所以说~读文网小编在这就给大家介绍下笔记本电脑物理内存高的解决方法!
启动"windows任务管理器",快捷键"alt+ctrl+delete"点击"性能"选项卡,查看系统内存和物理内存的使用情况,如下图:
点击"开始"菜单,然后再输入msconfig命令,如下图:
会弹出"系统配置"的对话框,然后选择"服务"这个选项卡.你可以看到很多运行的服务.将前面的复选框的勾选上.然后点击"全部禁用"按钮.确定即可(禁止服务时候.先确定 不是系统必须的服务(即禁用也不会影响系统的运行)。
这样即可将电脑物理内存降低。
总结
如果大家还遇见自己笔记本电脑物理内存过高,就可以试试读文网小编为大家推荐的方法!
浏览量:3
下载量:0
时间:
在现如今这个电子信息时代,几乎每个人都离不开网络、离不开电子产品,而内存在电子产品里有至关重要的作用,几乎所有的程序都是需要内存来处理的,当我们使用电子产品时,所进行的程序太多或者太大,也就是内存太满,处理不了的时候,电子产品就会出现没有反应、反应慢,没法创建新的进程等等好多问题。这些常常是因为我们没有良好的编码习惯和规范,就会造成我们常说的内存泄露和内存溢出。
内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。 为了便于理解我们可以有个形象的比喻就是“操作系统可提供给所有进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。所以“内存泄漏”是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,如果没有任何一个指针指向它,那么这块内存就泄漏了。
内存泄露指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 为了便于理解,我们不妨打个比方。缓冲区溢出好比是将十磅的糖放进一个只能装五磅的容器里。一旦该容器放满了,余下的部分就溢出在柜台和地板上,弄得一团糟。由于计算机程序的编写者写了一些编码,但是这些编码没有对目的区域或缓冲区——五磅的容器——做适当的检查,看它们是否够大,能否完全装入新的内容——十磅的糖,结果可能造成缓冲区溢出的产生。如果打算被放进新地方的数据不适合,溢得到处都是,该数据也会制造很多麻烦。但是,如果缓冲区仅仅溢出,这只是一个问题。到此时为止,它还没有破坏性。当糖溢出时,柜台被盖住。可以把糖擦掉或用吸尘器吸走,还柜台本来面貌。与之相对的是,当缓冲区溢出时,过剩的信息覆盖的是计算机内存中以前的内容。除非这些被覆盖的内容被保存或能够恢复,否则就会永远丢失。发生内存泄漏的程序很多,但是要想产生一定的后果,就需要这个进程是无限循环的,是个服务进程。当然,内核也是无限循环的,所以,如果内核发生了内存泄漏,情况就更加不妙。 内存泄露的问题其困难在于1.编译器不能发现这些问题。2.运行时才能捕获到这些错误,这些错误没有明显的症状,时隐时现。3.对于手机等终端开发用户来说,尤为困难。 内存泄露的解决方法:第一,良好的编码习惯,尽量在涉及内存的程序段,检测出内存泄露。当程式稳定之后,在来检测内存泄露时,无疑增加了排除的困难和复杂度。第二,重载 new 和 delete。这也是大家编码过程中常常使用的方法。
内存溢出的解决方法:关掉软件、或者重启电脑,释放一部分内存。
有了以上这么多的了解,小编相信大家在以后使用电子产品时会少很多疏忽和错误,而且,在碰到这些常见的问题时也会有基本的解决方法。不过,相比较其他产品,电子产品比较专业化,而且,随着是时代的进步,更新、淘汰的比较快,还是需要定期请专业人士帮我们检查、更新,释放内存,这样,对我们以后的使用会减少很多不必要的麻烦,也会延长这些电子产品的寿命。
浏览量:2
下载量:0
时间: