Java内存溢出与内存泄漏的区别

内存溢出

程序需要内存,向虚拟机申请,虚拟机内存不够,向系统申请;当虚拟机的总内存达到设置的最大内存时,就不会再向系统申请了,这时程序再申请内存时,如果虚拟机可用内存不够了,就是内存溢出。

内存泄漏

没用的数据继续占用内存,就是内存泄漏,内存泄漏积累到一定程度,会造成内存溢出。

个人认为,java不存在内存溢出。因为虚拟机会自动回收无用对象,也就是不可达对象。所有可达的对象,虚拟机都认为是有用的,自然不会去回收。

有人说,静态集合、静态变量、监听器、各种链接、单例等等是Java内存泄漏的主要原因,但是我觉得,对于一个合格的程序员来说,既然这样定义了,就是有用的,既然是有用的,就不是内存浪费(内存泄漏)

你可能感兴趣的:(JVM)