`

内存泄漏和内存溢出--

阅读更多
内存泄露:指程序中动态分配内存给一些临时对象,但是对象不会被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--
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics