您的位置:首页 > 其它

内存溢出与内存泄漏

2011-09-26 11:36 337 查看
Java中的内存由java虚拟机自己管理,区别于C++的程序手动释放。Java的内存可以笼统的分为数据堆(Heap)和栈(Stack)两个部分。程序在运行的时候一般分配数据推,把局部的临时变量都放进去,生命周期和进程有关。如果声明了static的变量,就直接在stack中运行,进程销毁后,不一定销毁static变量。

为了保证Java内存不会溢出,Java中有垃圾回收机制。System.gc()即垃圾收集机制,是指JVM用于释放那些不再使用的对象所占用的内存。垃圾收集的目的在于清除不再使用的对象。GC通过确定对象是否被活动对象引用来确定是否收集该对象。

内存溢出是指,你申请分配的JAVA虚拟机内存超过了系统能够提供给你的,系统不能满足需求,于是产生溢出。

内存泄漏是指,你向系统申请分配内存进行使用(new),可是使用完毕之后没有归还,结果你申请到的那块内存你自己不能再访问,该块已分配的内存也无法再使用。随着服务器内存的不断消耗,而无法使用的内存越来越多,系统也不能再次将它分配给需要的程序,产生泄漏。

内存溢出主要是由于代码编写时对某些方法、类应用不合理,或者没有预估到临时对象会占用很大内存量,或者把过多的数据放入JVM缓存,或者性能压力 大导致消息堆积而占用内存,以至于在性能测试时,生成庞大数量的临时对象,GC时没有做出有效回收甚至根本就不能回收,造成内存空间不足,内存溢出。如果编码之前,对内存使用量进行预估,对放在内存中的数据进行评估,保证有用的信息尽快释放,无用的信息能够被GC回收,这样在一定程度上是可以避免内存溢出问题的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: