欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

内存泄漏和内存溢出-- 博客分类: java细节 内存溢出内存泄漏 

程序员文章站 2024-03-09 13:44:35
...
内存泄露:指程序中动态分配内存给一些临时对象,但是对象不会被GC所回收,它始终占用内存。即被分配的对象可达但已无用。

内存溢出:指程序运行过程中无法申请到足够的内存而导致的一种错误

从定义上可以看出内存泄露是内存溢出的一种诱因,不是唯一因素。可以吧jvm参数设置低一点


1、堆内存溢出(outOfMemoryError:Java heap space)
       在jvm规范中,堆中的内存是用来生成对象实例和数组的。
       如果细分,堆内存还可以分为年轻代和年老代,年轻代包括一个eden区和两个survivor区。

**
* 堆内存溢出
*
* jvm参数:-Xms5m -Xmx5m -Xmn2m -XX:NewSize=1m
*
*/ 
public class MemoryLeak { 
    
    private String[] s = new String[1000]; 
  
    public static void main(String[] args) throws InterruptedException { 
        Map<String,Object> m =new HashMap<String,Object>(); 
        int i =0; 
        int j=10000; 
        while(true){ 
            for(;i<j;i++){ 
                MemoryLeak memoryLeak = new MemoryLeak(); 
                m.put(String.valueOf(i), memoryLeak); 
            } 
        } 
    } 


方法区内存溢出(outOfMemoryError:permgem space)

jvm参数:-XX:PermSize=2m -XX:MaxPermSize=2m 
将方法区的大小设置很低即可,在启动加载类库时就会出现内存不足的情况 

参考:
http://blog.csdn.net/shimiso/article/details/21830871--