内存泄漏:
内存泄漏是指在程序申请内存后, 那些被该回收的内存无法被系统回收. 内存泄漏的堆积, 最终会耗尽系统的所有内存
在c++中需要程序员手动释放内存对象, 所以更容易存在内存泄漏. java中有自动回收机制, 即垃圾回收, 使得该问题得到了有效的改善, 但也时有可能发生内存泄漏的, 因为java gc判断对象是否可以被回收使用的是可达性算法, 若一个对象已经无用, 但却被其他有用对象所引用, 是不会进行回收的.
内存溢出:
内存溢出是指程序在申请内存时, 没有足够的内存空间供其使用.
比如申请了一个int的内存, 要方long才能存下的值, 就会发生内存溢出.
比如说栈, 当栈满时在执行入栈操作, 必然会发生内存溢出, 叫做上溢出, 栈空时执行出栈操作也会发生溢出, 叫做下溢出.
同时, 死循环递归等也易发生内存溢出.