栈溢出、內存溢出、Java內存泄露
栈溢出:
在调用函数时,程序执行会创建函数栈帧。栈溢出出现在递归调用栈帧超出一定层数。
內存溢出:
申请巨大内存时出现内存溢出。
Java內存泄露:
内存泄露一般在c和c++中多见,因为c和c++中的内存创建和释放都是由程序员主动调用,如果创建了而没有释放,则产生内存泄露。
Java有垃圾回收器,程序员无法主动释放内存,内存释放由垃圾回收器自己完成。是不是java就没有内存泄露呢?
内存泄露的定义是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。
创建而不释放会使内存占用随时间增长,还有就是持有无用内存使得垃圾回收器无法释放也会造成内存占用随时间增长。
Java内存泄露体现在文件打开而不主动关闭,数据库创建连接而不主动关闭,网络连接创建而不主动关闭,其产生原因涉及到系统对资源的管理。
示例源码:
/*
* shsheng
*/
package Programing;
import java.util.Stack;
public class MemoryException {
public static void main(String[] args) {
// stackOverflow();
// outOfMemory();
// memoryLeak();
}
// 栈溢出
public static void stackOverflow() {
stackOverflow();
}
// 內存溢出
public static void outOfMemory() {
Object[] array;
while (true) {
array = new Object[1000000000];
array = (Object[]) array[1];
}
}
// 內存泄露
public static void memoryLeak() {
Stack