为您找到与java常见内存溢出相关的共200个结果:
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#
浏览量:2
下载量: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
时间:
内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题。内存溢出与锁表则不然,一般现象是操作一般时间后系统越来越慢,直到死机,但并不能明确是在什么操作上出现的,发生的时间点也没有规律,查看日志或查看数据库也不能定位出问题的代码。下面就由读文网小编为大家整理的溢出问题解决方法,供大家参考!
内存溢出虽然很棘手,但也有相应的解决办法,可以按照从易到难,一步步的解决。
第一步,就是修改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
时间:
java读取大文件内存溢出问题、如何在不重复读取与不耗尽内存的情况下处理大文件怎么办?别怕,下面就由读文网小编为大家整理的解决办法,供大家参考!
1、传统的在内存中读取
读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法:
1 2 3 | Files.readLines( new File(path), Charsets.UTF_8); FileUtils.readLines( new File(path)); |
这种方法带来的问题是文件的所有行都被存放在内存中,当文件足够大时很快就会导致程序抛出OutOfMemoryError 异常。
例如:读取一个大约1G的文件:
1 2 3 4 5 | @Test public void givenUsingGuava_whenIteratingAFile_thenWorks() throws IOException { String path = ... Files.readLines( new File(path), Charsets.UTF_8); } |
这种方式开始时只占用很少的内存:(大约消耗了0Mb内存)
1 2 | [main] INFO org.baeldung.java.CoreJavaIoUnitTest - Total Memory: 128 Mb [main] INFO org.baeldung.java.CoreJavaIoUnitTest - Free Memory: 116 Mb |
然而,当文件全部读到内存中后,我们最后可以看到(大约消耗了2GB内存):
1 2 | [main] INFO org.baeldung.java.CoreJavaIoUnitTest - Total Memory: 2666 Mb [main] INFO org.baeldung.java.CoreJavaIoUnitTest - Free Memory: 490 Mb |
这意味这一过程大约耗费了2.1GB的内存——原因很简单:现在文件的所有行都被存储在内存中。
把文件所有的内容都放在内存中很快会耗尽可用内存——不论实际可用内存有多大,这点是显而易见的。
此外,我们通常不需要把文件的所有行一次性地放入内存中——相反,我们只需要遍历文件的每一行,然后做相应的处理,处理完之后把它扔掉。所以,这正是我们将要做的——通过行迭代,而不是把所有行都放在内存中。
2、文件流
现在让我们看下这种解决方案——我们将使用java.util.Scanner类扫描文件的内容,一行一行连续地读取:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | FileInputStream inputStream = null ; Scanner sc = null ; try { inputStream = new FileInputStream(path); sc = new Scanner(inputStream, UTF-8 ); while (sc.hasNextLine()) { String line = sc.nextLine(); // System.out.println(line); } // note that Scanner suppresses exceptions if (sc.ioException() != null ) { throw sc.ioException(); } } finally { if (inputStream != null ) { inputStream.close(); } if (sc != null ) { sc.close(); } } |
这种方案将会遍历文件中的所有行——允许对每一行进行处理,而不保持对它的引用。总之没有把它们存放在内存中:(大约消耗了150MB内存)
1 2 | [main] INFO org.baeldung.java.CoreJavaIoUnitTest - Total Memory: 763 Mb [main] INFO org.baeldung.java.CoreJavaIoUnitTest - Free Memory: 605 Mb |
3、Apache Commons IO流
同样也可以使用Commons IO库实现,利用该库提供的自定义LineIterator:
1 2 3 4 5 6 7 8 9 | LineIterator it = FileUtils.lineIterator(theFile, UTF-8 ); try { while (it.hasNext()) { String line = it.nextLine(); // do something with line } } finally { LineIterator.closeQuietly(it); } |
由于整个文件不是全部存放在内存中,这也就导致相当保守的内存消耗:(大约消耗了150MB内存)
1 2 | [main] INFO o.b.java.CoreJavaIoIntegrationTest - Total Memory: 752 Mb [main] INFO o.b.java.CoreJavaIoIntegrationTest - Free Memory: 564 Mb |
4、结论
这篇短文介绍了如何在不重复读取与不耗尽内存的情况下处理大文件——这为大文件的处理提供了一个有用的解决办法。
浏览量:2
下载量:0
时间:
SD卡存储卡,是用于手机、数码相机、便携式电脑、MP3和其他数码产品上的独立存储介质,一般是卡片的形态,故统称为“存储卡”,又称为“数码存储卡”、“数字存储卡”、“储存卡”等。现在读文网小编为大家分享下常见的13种手机内存卡故障,供大家参考!
【状况一】:放存储卡在电脑识别.放到手机不识别!这种情况往往是因为存储卡在电脑上进行格式化,但是格式化与手机不兼容.解决方法是吧卡放回手机,用手机中的格式化存储卡功能从新格式化!
【状况二】:手机提示拔出存储卡请按确定按照提示将卡拔出来,一会再插入手机就可以继续使用,但是过不了多久有在回提示拔卡,如此反复!这是因为经常插拔存储卡,导致手机存储卡槽松动接触不良.可以考虑去客服检修一下手机,并且注意以后热插拔卡时不要用力过猛!
【状况三】:存储卡密码丢失,存储卡里文件很重要!!A:下载安装MMCpwd软件,运行该软件后,我们可以看到一排乱码,乱码间隔中显示的英文或者数字就是密码!!B:还有简单的方法,再手机上安装类似与FILEMAN或者SELEQ等资源管理软件.然后再手机的C盘的SYSTEN文件下找到MMCSTORE文件,并将其发送到电脑上,给文件加个TXT的扩展名,用记事本打开,简简单单的找回密码!
【状况四】:MMC卡读写速度越来越慢,远不如刚买回来的时候,同样是存储设备,手机中的MMC存储卡和电脑中的一样,用了一段时间以后会因为频繁的删除和拷贝会出现磁盘碎片从而影响读写速度,然而,硬盘的磁盘格式是FAT32或NTFS,手机中的MMC卡是FAT16的.因此,手机通过电脑的磁盘碎片整理后往往会出现一系列的错误,严重的会在MMC卡插入手机中抱错.其实我们只需要将MMC卡中的隐藏文件拷贝将卡格式化然后将文件拷入即可!
【状况五】:手机突然要求输入存储卡密码,否则拒绝访问,可是之前没有设置,非常不幸,你很有可能中了S60系统下的一种手机病毒----CARD***K木马.这个小木马会完美的伪装成INSTANT. sis破戒版软件来进行传播.当你不小心运行他之后,他就会给你的卡设置密码,这个密码随机产生长达16位,XX性几乎为0,如果中毒的话就只能和小卡说再见了!!A:不要接受任何陌生人发来得应用程序和短消息.特别是陌生的蓝牙传来得东西!B:尽量从可以信任的站点下载东西C:再手机中安装一款专业的病毒软件。
【状况六】:手机插上存储卡不能打开网页,拔掉却可以!!无发打开网页,或者网络无反映都有可能是因为第三方输入法引起的.切换回原来的输入法,问题就解决了!
【状况七】:1GBYTE的MMC卡,拷入600MB的文件,再电脑上无法将存储卡安全移除,于是拔除,储存卡装入手机后显示卡已损坏,如在将卡连接电脑,电脑不识别!一次性拷贝过大容量的资料的存储卡,偶尔后出现无法删除存储卡的现象,建议以后拷贝时一批批分开拷贝,如果手机存储卡与电脑无法识别可以进行:A:再电脑端,用电脑使用FAT16格式进行格式化B:用强行格式化工具MMCMEDIC进行修复C:直接在手机上进行格式化存储卡。
【状况八】:手机格式化存储卡时出现存储卡以被使用,从新启动手机问题依然按照下列步骤尝试:关机,重新拔插储存卡,开机。
【状况九】:手机中的许多程序无法正常运行,当手机和存储卡连接时候显示存储卡不存在无法连接!这个情况很有可能是存储卡被改名字引起的,因而导致的程序错误,只要将注册表到处,再电脑的记事本中进行批量替换存储卡名字就可以了!
【状况十】:存储卡再格式化后显示不能使用先检查使用格式化的格式是否为FAT32格式,如果是用FAT16进行格式,如果问题依然存在,可以尝试在电脑系统里的磁盘工具进行修复。
【状况十一】:存储卡中放置的多媒体照片,视频文件突然不知道去那了!将存储卡用读卡器连接上电脑,确定其盘符,打开电脑的开始菜单,选择运行,输入CMD后回车,在MS-DOS命令下输入VCHKDSKH:/F
【状况十二】:诺基亚N73在格式化存储卡后很多软件无法正常使用在格式化存储卡之前,必须将遗留在手机内的软件卸载.否则在次安装同版本的软件时就回发生错误备分存储卡上的文件---格式化!
【状况十三】:把存储卡放入读卡器连接后,电脑想死机后没有什么反映,接着出现两种情况:A:电脑提示存储卡无法读取B:漫长的等待中失去耐心,拔下存储卡,电脑显示无法操作存储卡!检查读卡器是否插好!不行换个读卡器要不就格式化再不行只有换卡了!
看过“13种手机内存卡故障”
浏览量:2
下载量:0
时间:
Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果。在此之前,主流程序怨言(如C/C++等)直接使用物理硬件(或者说操作系统的内存模型),因此,会由于不同的平台上内存模型差异,导致程序在一套平台上并发完成正常,而在另一套平台上并发访问却经常出错,因此经常需要针对不同的平台来编写程序。
Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。
Java内存模型规定了所有变量都存储在主内存中,每条线程都有自己的工作内存,线程的工作内存保存了被该线程使用到变量的主内存副本拷贝,线程对变量的所有操作(读取,赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同线程也不能直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成,线程,主内存,工作内存三者的交互关系。
ava中通过多线程使得多个任务同时执行处理,所有的线程共享JVM内存区域main memory,而每个线程又有自己的工作内存,当线程与内存区域进行交互时,数据从主存拷贝到工作内存,进而交由线程处理。
Java虚拟机内存模型中定义的访问操作与物理计算机处理的基本一致。
1、程序计数器(Program Counter Register)
程序计数器是一块较小的内存空间,其存放的是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
由于Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。
如果线程正在执行的是一个Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Natvie 方法,这个计数器值则为空(Undefined)。此内存区域是唯一一个在Java 虚拟机规范中没有规定任何OutOfMemoryError 情况的区域。
2、Java虚拟机栈(Java Virtual Machine Stacks)
与程序计数器一样,Java虚拟机栈也是线程私有的,其生命周期与线程相同。
虚拟机栈描述的是Java 方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame ①)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
经常有人把Java 内存区分为堆内存(Heap)和栈内存(Stack),这种分法比较粗糙,Java 内存区域的划分实际上远比这复杂。这种划分方式的流行只能说明大多数程序员最关注的、与对象内存分配关系最密切的内存区域是这两块。其中所指的“堆”在后面会专门讲述,而所指的“栈”就是现在讲的虚拟机栈,或者说是虚拟机栈中的局部变量表部分。
局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference 类型,它不等同于对象本身,根据不同的虚拟机实现,它可能是一个指向对象起始地址的引用指针,也可能指向一个代表对象的句柄或者其他与此对象相关的位置)和returnAddress 类型(指向了一条字节码指令的地址)。其中64 位长度的long 和double 类型的数据会占用2 个局部变量空间(Slot),其余的数据类型只占用1 个。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。
抛出异常:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展(当前大部分的Java 虚拟机都可动态扩展,只不过Java 虚拟机规范中也允许固定长度的虚拟机栈),当扩展时无法申请到足够的内存时会抛出OutOfMemoryError 异常。
3、本地方法栈(Native Method Stacks)
本地方法栈与虚拟机栈的作用非常相似,虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用的Native方法服务的。
虚拟机规范中对本地方法栈中的方法使用的语言、使用方式与数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。甚至有的虚拟机(譬如Sun HotSpot 虚拟机)直接就把本地方法栈和虚拟机栈合二为一。与虚拟机栈一样,本地方法栈区域也会抛出StackOverflowError 和OutOfMemoryError异常。
4、Java堆(Java Heap)
对于大多数应用来说,Java 堆是Java 虚拟机所管理的内存中最大的一块。Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。
Java堆中唯一的目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
这一点在Java 虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配①,但是随着JIT 编译器的发展与逃逸分析技术的逐渐成熟,栈上分配、标量替换②优化技术将会导致一些微妙的变化发生,所有的对象都分配在堆上也渐渐变得不是那么“绝对”了。
Java堆是垃圾收集器管理的主要区域,因此很多时候也被称作“GC堆”(Garbage Collected Heap)。
根据Java 虚拟机规范的规定,Java 堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可,就像我们的磁盘空间一样。在实现时,既可以实现成固定大小的,也可以是可扩展的,不过当前主流的虚拟机都是按照可扩展来实现的(通过-Xmx和-Xms 控制)。如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError 异常。
4、方法区(Method Area)——又名Non-Heap
方法区与Java堆一样,是各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。虽然Java 虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java 堆区分开来。
根据Java 虚拟机规范的规定, 当方法区无法满足内存分配需求时, 将抛出OutOfMemoryError 异常。
5、运行时常量池(Runtime Constant Pool)
运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容在类加载后存放到方法区的运行时常量池中。
6、直接内存(Direct Memory)
直接内存并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,但是这部分内存也被频繁地使用,而且也可能导致OutOfMemoryError 异常出现。应用在某些场景中能显著提高性能,因为其避免了在Java堆和Native堆中来回复制数据。
浏览量:2
下载量:0
时间:
本篇文章读文网小编主要推荐的是内存常见术语介绍。一起来学习吧!
BANK:BANK是指内存插槽的计算单位(也有人称为记忆库),它是计算机系统与内存间资料汇流的基本运作单位。
内存的速度:内存的速度是以每笔CPU与内存间数据处理耗费的时间来计算,为总线循环(bus cycle)以奈秒(ns)为单位。
内存模块 (Memory Module):提到内存模块是指一个印刷电路板表面上有镶嵌数个记忆体芯片chips,而这内存芯片通常是 DRAM芯片,但近来系统设计也有使用快取隐藏式芯片镶嵌在内存模块上内存模块是安装在PC 的主机板上的专用插槽(Slot)上镶嵌在Module上 DRAM芯片(chips)的数量和个别芯片(chips)的容量,是决定内存模块的设计的主要因素。
SIMM (Single In-line Memory Module):电路板上面焊有数目不等的记忆IC,可分为以下2种型态:
72PIN:72脚位的单面内存模块是用来支持32位的数据处理量。
30PIN:30脚位的单面内存模块是用来支持8位的数据处理量。
DIMM (Dual In-line Memory Module):(168PIN) 用来支持64位或是更宽的总线,而且只用3.3伏特的电压,通常用在64位的桌上型计算机或是服务器。
RIMM:RIMM模块是下一世代的内存模块主要规格之一,它是Intel公司于1999年推出芯片组所支持的内存模块,其频宽高达1.6Gbyte/sec。
SO-DIMM (Small Outline Dual In-line Memory Module) (144PIN): 这是一种改良型的DIMM模块,比一般的DIMM模块来得小,应用于笔记型计算机、列表机、传真机或是各种终端机等。
PLL: 为锁相回路,用来统一整合时脉讯号,使内存能正确的存取资料。
Rambus 内存模块 (184PIN): 采用Direct RDRAM的内存模块,称之为RIMM模块,该模块有184pin脚,资料的输出方式为串行,与现行使用的DIMM模块168pin,并列输出的架构有很大的差异。
6层板和4层板(6 layers V.S. 4 layers): 指的是电路印刷板PCB Printed Circuit Board 用6层或4层的玻璃纤维做成,通常SDRAM会使用6层板,虽然会增加PCB的成本但却可免除噪声的干扰,而4层板虽可降低PCB的成本但效能较差。
Register:是缓存器的意思,其功能是能够在高速下达到同步的目的。
SPD:为Serial Presence Detect 的缩写,它是烧录在EEPROM内的码,以往开机时BIOS必须侦测memory,但有了SPD就不必再去作侦测的动作,而由BIOS直接读取 SPD取得内存的相关资料。
Parity和ECC的比较:同位检查码(parity check codes)被广泛地使用在侦错码 (error detection codes)上,他们增加一个检查位给每个资料的字元(或字节),并且能够侦测到一个字符中所有奇(偶)同位的错误,但Parity有一个缺点,当计算机查到某个Byte有错误时,并不能确定错误在哪一个位,也就无法修正错误。
缓冲器和无缓冲器(Buffer V.S. Unbuffer):有缓冲器的DIMM 是用来改善时序(timing)问题的一种方法无缓冲器的DIMM虽然可被设计用于系统上,但它只能支援四条DIMM。若将无缓冲器的DIMM用于速度为100Mhz的主机板上的话,将会有存取不良的影响。而有缓冲器的DIMM则可使用四条以上的内存,但是若使用的缓冲器速度不够快的话会影响其执行效果。换言之,有缓冲器的DIMM虽有速度变慢之虞,但它可以支持更多DIMM的使用。
自我充电 (Self-Refresh):DRAM内部具有独立且内建的充电电路于一定时间内做自我充电, 通常用在笔记型计算机或可携式计算机等的省电需求高的计算机。
预充电时间 (CAS Latency):通常简称CL。例如CL=3,表示计算机系统自主存储器读取第一笔资料时,所需的准备时间为3个外部时脉 (System clock)。CL2与CL3的差异仅在第一次读取资料所需准备时间,相差一个时脉,对整个系统的效能并无显着影响。
时钟信号 (Clock):时钟信号是提供给同步内存做讯号同步之用,同步记忆体的存取动作必需与时钟信号同步。
浏览量:2
下载量:0
时间:
对于CPU和内存这两个电脑中的重要部件,有时候故障也是蛮多的。下面读文网小编就为大家介绍一下关于CPU及内存的常见故障处理技巧,欢迎大家参考和学习。
1、故障的判断与处理
由于内存安装不当或有严重的质量问题往往会导致开机“内存报警”,是内存最常见的故障之一。在开机的时候,听到的不是平时“嘀”的一声,而是“嘀,嘀,嘀...”响个不停,显示器也没有图像显示。这种故障多数时候是因为电脑的使用环境不好,湿度过大,在长时间使用过程中,内存的金手指表面氧化,造成内存金手指与内存插槽的接触电阻增大,阻碍电流通过而导致内存自检错误。这类内存故障现象比较明显,也很容易通过重新安装或者替换另外的内存条加以确认并解决。在取下内存条后,应注意仔细用无水酒精及橡皮将内存两面的金手指擦洗干净,而且不要用手直接接触金手指,因为手上汗液会附着在金手指上,在使用一段时间后会再次造成金手指氧化,重复出现同样的故障,安装时可多换几个内存插槽。
另外,我们还应用毛笔刷将内存条插槽中的灰尘清理掉,然后用一张比较硬且干净的白纸折叠起来,插入内存条插槽中来回移动,通过该方法让纸张将内存条插槽中的金属物擦拭干净,然后再安装内存条。同时要仔细观察是否有芯片被烧毁、电路板损坏的痕迹。另外某些老内存(如EDO内存),安装时必须成对使用。而Rambus内存必须要将主板上的内存插槽插满才能正常使用,如果没有插满,就需要使用一个与Rambus形状类似的专用“串接器”插在空闲的插槽上。
因内存质量不佳或损坏而导致的系统工作不稳定故障,是电脑维修过程中,遇到的最多的问题了。比如系统频繁出现“篮屏死机”和“注册表损坏”错误或者Windows经常自动进入安全模式等。比如遇到“注册表错误”时,我们可以进入安全模式,在运行中敲入“MSCONFIG”命令,将“启动”项中的ScanRegistry前面的“V”去除,然后再重新启动电脑。如果故障排除,说明该问题真的是由注册表错误引起的;如果故障仍然存在,基本上就可以断定该机器内存有问题,这时需要使用替换法,换上性能良好的内存条检验是否存在同样的故障。
有时候,长时间不进行磁盘碎片整理,没有进行错误检查时,也会造成系统错误而提示注册表错误,但对于此类问题在禁止运行“ScanRegistry”后,系统就可以正常运行,但速度会明显的变慢。解决此类故障除了更换内存条以外,还可以先尝试调整主板BIOS中内存的相关参数。如果内存品质达不到在BIOS中设置的各项指标要求,会使内存工作在非稳定状态下,建议在BIOS中逐项降低CAS、RAS等参数的设置数值。假如您的内存并非名牌优质产品,最好选择默认设置为“SPD”,即“自动侦测模式”。在SPD模式下,系统自动从内存的SPD芯片中获取信息,所以理论上说,此时内存的工作状态是最稳定的。
在大多数内存同步工作模式下,内存的运行速度与CPU外频是相同的。但现在很多主板都支持“异步内存速度”,也就是说两者的工作频率可存在一定差异。以典型的VIA KT333主板为例,进入BIOS后找到“DRAM Clock(内存时钟频率)”选项,即有“Host Clock(总线频率和内存工作频率同步)、Hclk-33M(总线频率减33M)、Hclk+33M(总线频率加33M)等三种模式。如果内存工作不稳定的话,当然可以将内存工作速度设定得低一些。
2.兼容性故障的处理
内存是电脑中最容易升级的配件之一。由于我们使用的电脑是由不同厂商生产的产品组合在一起的,不兼容性成为用户最为关注的问题。因为升级不当,就会导致出现系统工作不稳定、内存容量不能完全识别,甚至不能开机等一系列故障。
在升级过程中,内存的混插往往会出现问题,其中之一就是因为单面和双面内存混插造成的。双面内存往往需要占用两个“BANK”,而一些旧型号的主板可能存在兼容问题(像INTEL的LX/BX/810/815等老主板),就只能识别一半的容量。就单、双面内存的认识也想多说两句,其实它们的本身没有好坏之分,区别也很小,只不过最重要的是要看哪种封装被主板芯片组支持的更好。不可否认的一点是,同等容量的内存,单面比双面的集成度要高,生产日期要靠后,所以工作起来就更稳定罢了。另外大家很关心两种不同规格的内存条是否能够在同一主板中使用,实际上不同厂家、不同型号、不同速度的内存条是可以一起使用的,但对系统的稳定有一定的影响,尤其将会影响到超频性能。所以用户在使用两条或两条以上的内存条时,应该尽量选择相同品牌和型号的产品,这样可以最大限度地避免内存条不兼容的现象。
如果无法购买到与原内存条相同的产品时,应尽量采用市场上口碑较好的品牌内存条,它们一般都经过严格的特殊匹配及兼容性测试,在元件、设计和质量上也能达到或超过行业标准。当然并不是所有的品牌内存条都具有良好的兼容性。再有,使用时应注意在主板BIOS中将有关内存的参数可以设得保守一些,比如在DDR266的内存和DDR400内存混用的情况下,可将各项内存参数按DDR266的要求进行设定,同时应将SPD功能禁用,以免引起混乱。
另外,我们经常讲的“双通道内存”实际上是一种主板芯片组技术,与内存本身并没有多大的关系。目前主要有nVIDIA的nForce2和Intel的i865/i875等芯片组支持双通道技术。在i865/i875主板上要实现双通道内存技术,必需使用规格及容量相同两条或者四条内存。只有严格按DIMM1+2(主板只有两条内存插槽)、DIMM1+3、DIMM2+4以及DIMM1+2+3+4这四种内存安装方式,才能建立双通道模式。而在nForce2系列主板上组建双通道内存模式时,对内存容量乃至型号并没有严格的要求,用两条或三条内存都可以,只要保证DIMM1中插有内存,DIMM2、DIMM3中任意位置插有一条或两条内存,皆可打开双通道。使用非常方便。在建立了双通道模式后,我们可以在启动时的BIOS信息中看见双通道内存的标识。
浏览量:3
下载量:0
时间:
在现如今这个电子信息时代,几乎每个人都离不开网络、离不开电子产品,而内存在电子产品里有至关重要的作用,几乎所有的程序都是需要内存来处理的,当我们使用电子产品时,所进行的程序太多或者太大,也就是内存太满,处理不了的时候,电子产品就会出现没有反应、反应慢,没法创建新的进程等等好多问题。这些常常是因为我们没有良好的编码习惯和规范,就会造成我们常说的内存泄露和内存溢出。
内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。 为了便于理解我们可以有个形象的比喻就是“操作系统可提供给所有进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。所以“内存泄漏”是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,如果没有任何一个指针指向它,那么这块内存就泄漏了。
内存泄露指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 为了便于理解,我们不妨打个比方。缓冲区溢出好比是将十磅的糖放进一个只能装五磅的容器里。一旦该容器放满了,余下的部分就溢出在柜台和地板上,弄得一团糟。由于计算机程序的编写者写了一些编码,但是这些编码没有对目的区域或缓冲区——五磅的容器——做适当的检查,看它们是否够大,能否完全装入新的内容——十磅的糖,结果可能造成缓冲区溢出的产生。如果打算被放进新地方的数据不适合,溢得到处都是,该数据也会制造很多麻烦。但是,如果缓冲区仅仅溢出,这只是一个问题。到此时为止,它还没有破坏性。当糖溢出时,柜台被盖住。可以把糖擦掉或用吸尘器吸走,还柜台本来面貌。与之相对的是,当缓冲区溢出时,过剩的信息覆盖的是计算机内存中以前的内容。除非这些被覆盖的内容被保存或能够恢复,否则就会永远丢失。发生内存泄漏的程序很多,但是要想产生一定的后果,就需要这个进程是无限循环的,是个服务进程。当然,内核也是无限循环的,所以,如果内核发生了内存泄漏,情况就更加不妙。 内存泄露的问题其困难在于1.编译器不能发现这些问题。2.运行时才能捕获到这些错误,这些错误没有明显的症状,时隐时现。3.对于手机等终端开发用户来说,尤为困难。 内存泄露的解决方法:第一,良好的编码习惯,尽量在涉及内存的程序段,检测出内存泄露。当程式稳定之后,在来检测内存泄露时,无疑增加了排除的困难和复杂度。第二,重载 new 和 delete。这也是大家编码过程中常常使用的方法。
内存溢出的解决方法:关掉软件、或者重启电脑,释放一部分内存。
有了以上这么多的了解,小编相信大家在以后使用电子产品时会少很多疏忽和错误,而且,在碰到这些常见的问题时也会有基本的解决方法。不过,相比较其他产品,电子产品比较专业化,而且,随着是时代的进步,更新、淘汰的比较快,还是需要定期请专业人士帮我们检查、更新,释放内存,这样,对我们以后的使用会减少很多不必要的麻烦,也会延长这些电子产品的寿命。
浏览量:2
下载量:0
时间:
内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。下面读文网小编就为大家介绍一下关于设置虚拟内存的常识和常见误区,供大家参考和学习。
为了解决这个问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存,虚拟内存在硬盘上的存在形式就是PAGEFILE.SYS这个页面文件。
虚拟内存只是真实内存不足的补充,所以不要加以神化,虚拟内存的读写性能(即硬盘的读写)只有真正内存性能的几十分之一,而且对硬盘损伤很大!能不用则不用,能少用则少用!原则是够用+留少量余量即可。
下面,我们来看下常见的几个问题,和用户的理解误区,当然这篇文章对Windows7、Vista、XP等系统都是通用的。
答案:错!要根据实际使用情况来判断。特别是大内存普及的今天。内存使用率看任务管理器的内存一栏。
一般512MB内存,根据实际使用内存占用,可以设虚拟内存为256-768MB(内存+虚拟内存之和一般比正常占用高256MB即可)。
1GB内存,根据实际使用内存占用情况,可以设虚拟内存为128-1024MB(内存+虚拟内存之和一般比正常占用高256-512MB即可)。平时正常占用为几百MB的人(占多数),甚至可以禁用虚拟内存(有软件限制的可以设少量虚拟内存,如16-128MB)。
内存为2G及以上的,一般可以禁用虚拟内存(有软件限制的可以设少量虚拟内存,如16-128MB)。部分确实会使用大量内存的人,如玩大型3D游戏、制作大幅图片、3D建模等,并收到系统内存不足警告的,才需要酌情设定虚拟内存。
浏览量:2
下载量:0
时间:
内存故障在电脑故障中占有相当大的比例。而且内存故障有时比较隐蔽,判断比较麻烦。本位就为大家介绍一些常见的内存BIOS故障现象及如何解决的方法。希望能给大家带来一点帮助
内存是电脑运行时的工作“仓库”,内存故障在电脑故障中占有相当大的比例。而且内存故障有时比较隐蔽,判断比较麻烦。本文就为大家介绍一些常见的内存BIOS故障现象及如何解决的方法。希望能给大家带来一点帮助。
我有一KT133主板,采用普通HY PC133 128MB内存的电脑,下载了一个优化BIOS设置的程序对BIOS进行了优化,可是优化后,在Windows下频繁出现“非法操作”错误,怎样解决呢?
一般情况下,BIOS优化程序会给BIOS进行全面的优化。从上面的配置看,内存是普通的HY内存,并不是太好的,所以进入BIOS后,会在“Advanced Chipset Features”处发现,BIOS优化程序已经将 “SDRAM Cycle Length”项设为2。如果要稳定,我们只要将2改为3,再将“Bank InterLeave”由“4Bank”改为“Disable”,然后重新启动机器即可。
浏览量:2
下载量:0
时间:
内存溢出的原因是什么?出现额内存溢出又如何解决呢?下面读文网小编就为大家分享一下内存溢出的原因以及解决方法,欢迎大家参考和学习。
1.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
2.检查代码中是否有死循环或递归调用。
3.检查是否有大循环重复产生新对象实体。
4.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
5.检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
第四步,使用内存查看工具动态查看内存使用情况
浏览量:6
下载量:0
时间:
内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。下面读文网小编就为大家介绍一下关于设置虚拟内存的常识和常见误区,供大家参考和学习。
为了解决这个问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存,虚拟内存在硬盘上的存在形式就是PAGEFILE.SYS这个页面文件。
虚拟内存只是真实内存不足的补充,所以不要加以神化,虚拟内存的读写性能(即硬盘的读写)只有真正内存性能的几十分之一,而且对硬盘损伤很大!能不用则不用,能少用则少用!原则是够用+留少量余量即可。
下面,我们来看下常见的几个问题,和用户的理解误区,当然这篇文章对Windows7、Vista、XP等系统都是通用的。
答案:错。虚拟内存过大,既浪费了磁盘空间,又增加了磁头定位的时间,降低了系统执行效率,没有任何好处。正确设置可节省256MB-4G左右空间(视内存大小) 。
以Windows7为例,计算机右键,属性,高级系统设置,性能>设置...,高级,虚拟内存>更改...,自动管理取消,自定义大小,设置,确定,退出重启,当然Vista等系统也是一样的。
浏览量:2
下载量:0
时间:
在论坛上很多朋友在讨论关于内存溢出一系列问题。对于这个故障现象,到底是什么意思呢?下面读文网小编就为大家介绍一下具体的解决方法吧,欢迎大家参考和学习。
为了便于理解,我们不妨打个比方。缓冲区溢出好比是将十磅的糖放进一个只能装五磅的容器里。一旦该容器放满了,余下的部分就溢出在柜台和地板上,弄得一团糟。由于计算机程序的编写者写了一些编码,但是这些编码没有对目的区域或缓冲区——五磅的容器——做适当的检查,看它们是否够大,能否完全装入新的内容——十磅的糖,结果可能造成缓冲区溢出的产生。
如果打算被放进新地方的数据不适合,溢得到处都是,该数据也会制造很多麻烦。但是,如果缓冲区仅仅溢出,这只是一个问题。到此时为止,它还没有破坏性。当糖溢出时,柜台被盖住。可以把糖擦掉或用吸尘器吸走,还柜台本来面貌。与之相对的是,当缓冲区溢出时,过剩的信息覆盖的是计算机内存中以前的内容。除非这些被覆盖的内容被保存或能够恢复,否则就会永远丢失。
在丢失的信息里有能够被程序调用的子程序的列表信息,直到缓冲区溢出发生。另外,给那些子程序的信息——参数——也丢失了。这意味着程序不能得到足够的信息从子程序返回,以完成它的任务。就像一个人步行穿过沙漠。如果他依赖于他的足迹走回头路,当沙暴来袭抹去了这些痕迹时,他将迷失在沙漠中。这个问题比程序仅仅迷失方向严重多了。入侵者用精心编写的入侵代码(一种恶意程序)使缓冲区溢出,然后告诉程序依据预设的方法处理缓冲区,并且执行。此时的程序已经完全被入侵者操纵了。
入侵者经常改编现有的应用程序运行不同的程序。例如,一个入侵者能启动一个新的程序,发送秘密文件(支票本记录,口令文件,或财产清单)给入侵者的电子邮件。这就好像不仅仅是沙暴吹了脚印,而且后来者也会踩出新的脚印,将我们的迷路者领向不同的地方,他自己一无所知的地方。
浏览量:3
下载量:0
时间:
大家都知道,内存是电脑必不可少的一个硬件,但是,电脑用久了,内存也会有各种各样的问题,读文网小编就在这里给大家带来详细常见的内存故障及解决方法。
内存做为电脑的五大部件之一,对电脑工作的稳定性和可靠性起着至关重要的作用。内存质量的好坏和可靠性的高低直接影响着计算机能否长时间稳定的工作。同时内存也是故障率最高的部件之一,我们在平时对电脑故障维修过程中,接触最多的也就是常说的“内存报警,开机黑屏”。在这里,我把常见的几种内存故障的表现及其原因总结出来,供大家参考。
这类故障常见于安装系统过程中,会经常意外的退出安装。实际上这也经常是因为内存的质量不良或稳定性差造成的,多数问题在更换内存后故障解决。此类问题无论是直接从光盘安装还是从硬盘安装都会出现同样的提示信息。虽然有点类似于我们在安装WIN98、WIN2K及XP过程遇到的无法正常读取某一文件,请选择“忽略,终止,放弃”,但那类问题多数是因为光盘的质量差或光驱的使用时间过久,读盘性能下降造成的,同时还会有光驱灯慢闪,并伴随着间断读盘时的 “哗哗”声。
如果我们在维修电脑故障过程中遇到此问题时,最好直接更换内存检测,看是否仍旧出现同样的故障。如故障消失,说明原来内存有问题;如果故障依旧,多数是因为光盘质量差或光驱读盘下降造成的,也可能是硬盘上的系统安装文件损坏。
浏览量:2
下载量:0
时间:
Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。
Java由James Gosling和同事们共同研发,并在1995年正式推出。Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Internet应用程序。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Javaapplet。另一方面,Java技术也不断更新。Java自面世后就非常流行,发展迅速,对C++语言形成有力冲击。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。2010年Oracle公司收购Sun Microsystems。那java如何手动释放内存?是手动还是自动呢?下面就由读文网小编为大家整理的,供大家参考!
java的内存回收是通过垃圾回收器来实现的 ,默认是自动的 。既在内存饱和的情况下 根据对象占用表来查找不在使用的内存 然后释放。 当然也可以强制调用垃圾回收器来手动进行内存回收。
Java由四方面组成:
●Java编程语言,即语法。
●Java文件格式,即各种文件夹、文件的后缀。
●Java虚拟机(JVM),即处理*.class文件的解释器。
●Java应用程序接口(Java API)。
浏览量:2
下载量:0
时间: