内存溢出与内存泄漏
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回收,这样在一定程度上是可以避免内存溢出问题的。
为了保证Java内存不会溢出,Java中有垃圾回收机制。System.gc()即垃圾收集机制,是指JVM用于释放那些不再使用的对象所占用的内存。垃圾收集的目的在于清除不再使用的对象。GC通过确定对象是否被活动对象引用来确定是否收集该对象。
内存溢出是指,你申请分配的JAVA虚拟机内存超过了系统能够提供给你的,系统不能满足需求,于是产生溢出。
内存泄漏是指,你向系统申请分配内存进行使用(new),可是使用完毕之后没有归还,结果你申请到的那块内存你自己不能再访问,该块已分配的内存也无法再使用。随着服务器内存的不断消耗,而无法使用的内存越来越多,系统也不能再次将它分配给需要的程序,产生泄漏。
内存溢出主要是由于代码编写时对某些方法、类应用不合理,或者没有预估到临时对象会占用很大内存量,或者把过多的数据放入JVM缓存,或者性能压力 大导致消息堆积而占用内存,以至于在性能测试时,生成庞大数量的临时对象,GC时没有做出有效回收甚至根本就不能回收,造成内存空间不足,内存溢出。如果编码之前,对内存使用量进行预估,对放在内存中的数据进行评估,保证有用的信息尽快释放,无用的信息能够被GC回收,这样在一定程度上是可以避免内存溢出问题的。
相关文章推荐
- 【原创】内存泄漏和溢出
- 移动端测试=== 两个概念 内存泄漏 和 内存溢出 【转】
- Android 内存浅析【二】【泄漏、溢出】
- 深入理解Java虚拟机---(3)内存溢出与内存泄漏
- 梦断代码2-隐性泄漏-内存溢出-越界改写
- Android 内存浅析【泄漏、溢出】【二】
- 如何避免内存泄漏、溢出的几种常用方法
- 内存图片内存溢出和泄漏
- 安卓中的:内存泄漏 和 内存溢出
- 内存泄漏、内存溢出
- 【Java JVM】如何避免内存泄漏、溢出
- 内存溢出和泄漏
- 野指针--内存泄漏--缓存区溢出--栈溢出
- 内存泄漏、内存溢出、内存越界、缓冲区溢出、栈溢出
- Android 内存浅析【泄漏、溢出】【一】
- java学习——java基础(十二)之内存泄漏、内存溢出及JVM内存调优
- 内存溢出与泄漏
- C++编程中内存溢出问题
- 内存泄漏
- 关于解决tomcat的一些问题-内存溢出 PermGen space以及超时