在查看内存溢出的时候,我们需要明白,堆溢出和持久代溢出,他们不一样,说到内存泄漏,我们就需要明白,内存中  年老代和新生代,和持久代,这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; #1MB=1024KB=1024*1024B=1024*1024*8b
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 也就满了,在监视中也可以看到,看到堆是一个阶梯式上升,因为我们程序就是每次都往堆中放入1M的数据,直至它内存满

我们点击“堆dump” ,就会生成一个 hpro文件,我们可以对hpro文件进行分析,分析见下一篇文章 《https://www.cnblogs.com/chongyou/p/11710339.html

程序中,我的是在写入179M就会内存溢出,

如果发现自己没有visual GC,那需要去安装插件,

在可用插件中找到visual GC,因为我已经安装了,所以在已安装中

使用jvisualvm.exe工具查看java项目内存溢出(堆溢出)的更多相关文章

  1. java heap space以及jvisualvm.exe 工具

    最近遇到了java heap space错误. 这个问题的原因,其实还是堆溢出了. 解决这个问题 1 首先我们考虑,在代码中哪里使用了较多的对象,但是又没有及时回收. 2 我们可以通过  jvisua ...

  2. 利用JConsole工具监控java程序内存和JVM

    一.找到java应用程序对应的进程PI 性能测试应用程序访问地址:http://192.168.29.218:7070/training/ 部署的应用服务器为tomcat6.028 启动tomcat服 ...

  3. (转)利用JConsole工具监控java程序内存和JVM

    转自:http://www.cnblogs.com/luihengk/p/5446279.html 一.找到java应用程序对应的进程PI 性能测试应用程序访问地址:http://192.168.29 ...

  4. 利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露

    转载:http://blog.csdn.net/wanghuiqi2008/article/details/50724676 一.开发环境: 操作系统:ubuntu 14.04 IDE:Eclipse ...

  5. 使用jvisualvm.exe工具远程监视tomcat的线程运行状态

    一.简述 在web项目中,常使用tomcat作为web容器.代码编写的时候,由于业务需要,也常会使用线程机制.在系统运行一段时间之后,若出现响应慢或线程之间出现死锁的情况,要查出问题所在,需要使用jd ...

  6. Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决

    问题描述: mac笔记本本身会自带几个python版本,比如python2.7版本,我没有改动mac默认的python版本,只是安装了python3.7版本. 使用Pycharm开发Python项目没 ...

  7. 查看java进程内存简单示例

    分析工具 1.jps 显示指定系统内的所有JVM进程 2.jstat 收集JVM各方面的运行数据 3.jinfo  显示JVM配置信息 4.jmap  堆快照 5.jhat  分析headdump文件 ...

  8. Java虚拟机内存区域堆(heap)的管理

    在上一节中Java 出现内存溢出的定位以及解决方案 中对于Java虚拟机栈以及方法区的内存出现的异常以及处理方式进行了解析,由于Java虚拟机对于堆的管理十分复杂,并且Java虚拟机中最基本的内存区域 ...

  9. 【转】Java学习---内存泄露与溢出的区别

    Java内存泄露与溢出的区别 Java内存泄漏就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源(内存资源耗尽): 而Java内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于 ...

随机推荐

  1. python 函数的递归

    递归:简单来说就是自己调用自己 这里我们又要举个例子来说明递归能做的事情. 例一: 现在你们问我,alex老师多大了?我说我不告诉你,但alex比 egon 大两岁. 你想知道alex多大,你是不是还 ...

  2. bootstrap日历插件地址

    http://www.bootcss.com/p/bootstrap-datetimepicker/

  3. (转)Linux 最大进程数

    Linux 最大进程数  原文:https://www.cnblogs.com/pangguoping/p/5792075.html 前言 使用环境:centos 7系统 一.查看用户打开的最大进程数 ...

  4. 原生JS写的ajax函数

    参照JQuery中的ajax功能,用原生JS写了一个ajax,功能相对JQuery要少很多,不过基本功能都有,包括JSONP. 调用的方式分为两种: 1. ajax(url, {}); 2. ajax ...

  5. 守护客户数据价值:企业级NewSQL HTAP分布式云TBase架构详解

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:jasonys,隶属于腾讯技术工程事业群数据平台部,负责TBase数据的技术研发和架构设计,有超过10年的数据库内核开发设计经验,完成 ...

  6. Python 集合(set)类型的操作——并交差

    介绍 python的set是一个无序不重复元素集,基本功能包括关系测试和消除重复元素. 集合对象还支持并.交.差.对称差等. sets 支持 x in set. len(set).和 for x in ...

  7. nyoj 600——花儿朵朵——【离散化、线段树插线问点】

    花儿朵朵 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 春天到了,花儿朵朵盛开,hrdv是一座大花园的主人,在他的花园里种着许多种鲜花,每当这个时候,就会有一大群游 ...

  8. jquery的方法总结

    1.1.概述随着WEB2.0及ajax思想在互联网上的快速发展传播,陆续出现了一些优秀的Js框架,其中比较著名的有Prototype.YUI.jQuery.mootools.Bindows以及国内的J ...

  9. 安卓API版本

  10. SpringSecurity 3.2入门(7)自定义权限控制介绍

    总结Spring Security的使用方法有如下几种: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中. 二种是用户和权限用数据库存储,而资源(url)和权限的对应关系硬编 ...