自己做例子看出来的一点名堂 对象在各个区区的位置

 

 

public class MethodAreaOutOfMemory { public static void main(String[] args) { while(true){ new User(); } } } class User{ private String name; private int age; } 这个会产生 

 

 都是在eden区增长消耗,然后new出来的,jvm的垃圾回收会把他收回去,所以出现了上下上下的折线,而且底部最低点都一致说明没有内存泄漏,

内存泄漏的概念是指,有对象是jvm已经无法回收了,明明代码里失去了引用,但是jvm却无法识别这些对象是否可以回收,就一直留在内存里,最后就导致系统down掉。

 

 执行了强制的gc动作,会把eden区的清掉,

 

 

public class MethodAreaOutOfMemory {
	
	public static void main(String[] args) {

	       while(true){

	           Enhancer enhancer = new Enhancer();

	           enhancer.setSuperclass(User.class);

	           enhancer.setUseCache(false);

	           enhancer.setCallback(new MethodInterceptor() {

				public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
	                  return arg3.invokeSuper(arg0, arg2);
				}
	            

	           });

	           enhancer.create();
	    	   
	 

	       }

	    }

	}

class User{
	private String name;
	private int age;
}

 

很快就玩完了,而且是old和eden都暴增,而用new来产生对象 old区增加很少,



 

 

 

-XX:+CMSClassUnloadingEnabled:设置对Perm区进行回收。

如果使用Spring/Hibernate框架大量采用cglib,导致生成的Proxy会比较多,而这些是存放在PermGen区域,SUN JDK默认情况下不会去回收,必须加上-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled参数,JDK才会去回收这部分数据。
 确实加个这个条件跑起来后 ,就不会到高峰oom了
-verbose:gc -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+CMSClassUnloadingEnabled
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值