java处理内存泄露与内存溢出的学习总结

  首先了解内存溢出与内存泄露的概念。顾名思义,内存溢出就是指在指定大小的内存空间,写入了超出大小的数据,从而导致了内存溢出。比方说,定义了20个字节大小的内存空间,却写入了21个字节的数据。通俗的说,就是内存不够,没办法支持当前程序。当发生内存溢出时,程序将无法进行,强制终止。内存泄露是指某个程序已不再执行,却始终占用着内存,不释放,从而消耗着资源,称其为内存泄露。如果发生内存泄露,那么可用内存会逐渐减少,从而降低性能。

  对于内存溢出可能发生的情况,大概有几种:1、在程序中存在死循环,或者循环过多,而产生了过多重复的对象的实例;2、存在对象的引用,使用完后没有清除,导致JAVA虚拟机不能回收;3、一次操作时,在内存中加载了大量的数据;原则上来说,在JAVA中,由于它的自动垃圾回收机制,出现内存溢出的可能性并不是很大。

  当用new操作符创建对象实例时,JAVA会在堆内存中开辟内存空间,这段空间何时会被释放,取决于是否还存在对它的引用,对象的引用变量是在栈内存中创建,对象的引用变量在超出它的作用域范围后,会被销毁,但JVM不会立即销毁堆内存中的对象,在一个不确定的时间之后才会被销毁,释放掉空间,由于这段不确定的时间的存在,使得JAVA程序比较占内存,所以有时候会显得比较慢

   JAVA的垃圾回收机制彰显了JAVA的健壮性与安全性,合理的设计代码,有效的评估内存使用情况,基本上不会出现上述问题。


你可能感兴趣的:(java,jvm)