2019独角兽企业重金招聘Python工程师标准>>>

jmap

JDK自带了一些工具可以帮助我们查看JVM运行的堆内存情况,常用的是jmap命令

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

jmap -heap <pid> 打印堆的使用情况

那么,从这个输出中我们也可以大致看出堆的结构,分为Young Generation (年轻代) 和 Old Generation (老年代)

Young Generation又被划分为:Eden Space , From Space 和 To Space

可以看到这里To区是干净的,还未被使用,From区已经使用了95%了

jmap -histo[:live] <pid> 打印类的实例数量、占用的内存、类的名称,通常我们并不需要看所有的,只需要看前几条即可

jmap -dump:live,format=b,file=heap.bin <pid>

以hprof二进制格式dump堆的使用情况(PS:相当于生成一个快照,后续我们可以对这个快照文件进行分析)

Memory Analyzer (MAT)

文件dump下来以后,可以使用Eclipse的MAT插件进行查看

如果日常开发用的是eclipse的话,可以直接安装这个插件,如果不是的话,这个插件也可以独立运行

https://www.eclipse.org/mat/

https://www.eclipse.org/mat/downloads.php

解压之后双击MemoryAnalyzer.exe即可运行

打开刚才的heap.bin文件

可以看到下面有三个选项卡,包括可以执行的操作和报表

先看第一个Histogram

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

由于这里是随便运行的一个工程,并没有出现内存泄漏之类的问题,所以这里看到的都是一些基础的java类

查看引用

Dominator Tree 可以看到biggest object以及它们所占内存的比例

我们一级一级的找,可以找到源文件,然后分析代码,最终定位到问题之根源

jconsole

可以查看本地的进程,也可以查看远程主机上的进程

例如:jconsole 192.168.102.16:9105

或者本地

其它

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

转载于:https://my.oschina.net/u/3990817/blog/3007026

利用jmap和MAT等工具查看JVM运行时堆内存相关推荐

  1. java jmap mat_利用jmap和MAT等工具查看JVM运行时堆内存

    jmap JDK自带了一些工具可以帮助我们查看JVM运行的堆内存情况,常用的是jmap命令 如果想学习Java工程化.高性能及分布式.深入浅出.微服务.Spring,MyBatis,Netty源码分析 ...

  2. 在linux中怎么查看jvm堆内存大小,如何查看JVM运行的堆内存情况

    <不可不知的7个JDK命令>介绍了些jdk自带的问题排查工具,机器出现CPU飙升的情况,此时就可以借助工具,排查应用端是否存在一些潜在问题. jmap指令可以查看JVM运行的堆内存情况, ...

  3. 查看java运行时参数_查看JVM运行时参数

    1.查看JVM运行时参数 -XX:+PrintFlagsInitial -XX:PrintFlagsFinal -XX:+UnlockExperimentalVMOptions 解锁实验参数 -XX: ...

  4. JVM运行时的内存结构

    我们都知道,JVM的垃圾收集机制能够帮开发者自动管理内存,了解JVM运行时的内存结构是理解垃圾收集机制的前提.本文主要简单介绍JVM运行时的内存结构. [JVM运行时内存中不同的数据区域] 一.PC寄 ...

  5. 了解JVM运行时的内存分配

    前言 上文中,在介绍运行时数据区域中的 JAVA 堆时,提到了 JVM 中的堆,一般分为三大部分:新生代.老年代.永久代,本文将进一步了解运行时的内存分配情况. 正文 1.新生代 主要用来存放新生(n ...

  6. 图解带你掌握`JVM`运行时核心内存区

    摘要:堆空间差不多是最大的内存空间,也是运行时数据区最重要的内存空间.堆可以处于物理上不连续的内存空间,但在逻辑上它应该被视为连续的. 本文分享自华为云社区<醒酒菜:动画图解核心内存区--堆&g ...

  7. JVM运行时参数查看

    查询运行的JVM中的参数 jinfo -flag MaxHeapSize jinfo -flags 23789 显示 Non-default VM flags 官网地址:Java SE 文档 - AP ...

  8. 【转】android IDE——通过DDMS查看app运行时所占内存情况

    在Android内存优化方面,我们不可能做到没有大内存的占用情况. 所以有时候要清楚我们的app到底占用了多少内存,哪一步操作占用了多少的内存. 这时候,android的ddms中提供了一个工具,是可 ...

  9. [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义...

    前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机, ...

最新文章

  1. 河南省高中毕业会考计算机考试,河南高中会考等级划分标准
  2. 视频质量评价:挑战与机遇
  3. php视频流传输,视频流传输协议RTP/RTCP/RTSP/HTTP的区别
  4. linux c之fdopen(int fd, const char *type)使用总结
  5. 屏幕最左上角的 飞秋官方下载 字符
  6. python字典的键可以是列表吗_如何返回字典键作为Python中的列表?
  7. python xposed_xposed + python 怎么爬取微信朋友圈的数据
  8. rem适配的浏览器_移动端网页布局适配rem方案小结
  9. php反序列化总结与学习
  10. libuv tcp client
  11. 数据密集型应用系统设计--数据分区
  12. python零基础自学教材-零基础的小白怎么学python?
  13. CountDownLatch的两种常用场景
  14. Atitit 非结构化数据管理法 目录 1. 什么是非结构化数据? 1 2. 对非结构化数据也即对全文数据的搜索主要有两种方法: 2 2.1. 顺序扫描法(Serial Scanning): 2 2
  15. JavaScript高级编程之树节点搜索过滤的设计和实现
  16. 华为鸿蒙机顶盒,华为暗中放弃电视盒子业务,上百万的老用户该怎么办?
  17. Dijkstra算法--斐波那契堆,Python实现
  18. k8s教程01(k8s环境配置及私有仓库搭建)
  19. mysql的cnf配置文件全解析
  20. 青云QingCloud推出“平步青云”创业扶持计划

热门文章

  1. Circuit Breaker(电路熔断器)模式原理
  2. centos nginx不是命令_Nginx 在CentOS 6/7 上的安装与使用
  3. php for循环可以变量关联数组,数组字符串变量之间的转换,数组元素的回调,for循环遍历关联数组...
  4. iOS:弹出窗控制器:UIPopoverController
  5. 测试人员:如何品味软件的品位
  6. fsck.ext3: Unable to resolve 'LABEL=/design'
  7. arduino定时器函数如何使用_【Arduino101教程】定时器的使用
  8. 命名空间不能直接包含_C++程序中可以命名的5种元素
  9. MyBatis入门及CRUD
  10. tensorflow 导入新的tensorflow实例