使用jvisualvm.exe工具查看java项目内存溢出(堆溢出)

在查看内存溢出的时候,我们需要明白,堆溢出和持久代溢出,他们不一样,说到内存泄漏,我们就需要明白,内存中  年老代和新生代,和持久代,这3块的数据

自己的理解:

new了一个对象,会进入到堆里面,先放到年轻代中 也就是new generation ,他放到eden中,如果eden满了,就会进行一次yong gc ,如果还有存活对象(被用到的对象)就会被移到S0区或者S1中转移,如果s0和S1都已经满了,那么这些对象(引用)就会把放到年老代中去,也就是old  generation 区,

如果old区,也满了,也会GC一次,也就是FGC,也就是fullGC,如果fullGC一次,就在也不接受新new的对象,往里面存储3如果fullGC,5分钟拒绝服务,jvm拒绝工作,那么5分钟类都没办法使用,所以fullGC时间要短,次数要少,

持久代:当perm里面满了,也会存在fgc,在perm里面存储的是类对象

 1.制造内存泄漏的代码

import java.util.ArrayList;
import java.util.List;

public class test2 {

	public static void main(String[] args) {
		int size=1024 * 1024 *8;
		List<byte[] > list =new ArrayList<byte[]>();
		for (int i=0;i<1024;i++){
			System.out.println("jvm 写入数据"+(i+1)+"M");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			list.add(new byte[size]);
		}

	}

}

2.使用jdk 自带的工具  jvisualvm.exe 查看内存泄漏

我工具的存放路径为:C:\Program Files (x86)\Java\jdk1.8.0_131\bin

执行我的程序,查看visual GC

你会发现eden中数据,然后慢慢的移动到old,

当你内存泄漏了,old 也就满了,在监视中也可以看到

 

转载于:https://www.cnblogs.com/chongyou/p/9681868.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值